Jellyfin: The Free Software Media System
jellyfin.org
jellyfin.org
I came from Plex a few years ago after their login server had an outage and I was unable to access the media that was on my local computer. Before that I'd been annoyed by them pushing TV shows and since then I've heard about them giving reports on what people have watched. All in all I'm happy.
My setup is Jellyfin in a docker container running on a debian machine with an i7-1165G7. It's got a mounted NFS link to my Synology NAS with all the files. The main client I used is Android TV running on an NVIDIA shield.
All in all, it's been great. I've got a few nitpicks---loading on ios app isn't as fast as I like if I try to jump to the middle of a movie---but all in all it's great for just watching movies, tv shows, videos, &c. All without any link to the outside world. It's lovely.
They also are producing new features at a nice clip and have a strong community. I expect it to keep getting better and better, but honestly even if it never changed I'd happily use it for years.
But I hear ya, console support tends to lag behind because of the rules and costs of app dev for them
what are you referring to?
There was something that worked, going forward the core team decided to focus on a tight stream lined core and decruft 'features'.
Discussion:
https://old.reddit.com/r/selfhosted/comments/1dbiw90/skip_in...
https://forum.jellyfin.org/t-intro-skipper-project-dead
Seems like a temporary (indefinite) suspension and a storm in a teacup from those attached to the feature.
There is one big exception though: if you're watching Star Trek: Enterprise. The "skip intro" feature is invaluable so you don't have to be subjected to that truly horrific opening song.
Chromecast support is flaky. Most of the time when I cast from my Android phone, the app immediately "forgets" that there's something playing back on the Chromecast (even though it's still connected to it), so I can't control playback at all. It's also hit or miss if the Chromecast will successfully play the media if Jellyfin decides it needs to transcode it.
So I got a little NUC-like box (Intel N100), and installed Jellyfin on it (it was previously running on an old 2012 Mac Mini running Linux). I connected it directly to the TV and installed jellyfin-media-player on it, set to auto-login and start X on boot, with a minimal session that just runs JMP only in fullscreen mode. I use JMP on my laptop, or the Android app, to control it. JMP will randomly lose its connection to the Jellyfin server (even though it's running on the same machine), and won't try to reconnect, so nearly every time I go to use it, I have to ssh in and restart JMP so it reconnects.
On top of that, I get occasional audio dropouts when watching 4k content, and sometimes see 4k video stuttering (yes, hardware decoding is enabled for playback, and I've verified in the logs that it's being used). At those times, the box is around 40% idle, and intel_gpu_top shows that the decode and render bits have what I think should be more than enough headroom to avoid that sort of thing. I understand JMP uses libmpv for playback, so out of curiosity I tried playing video using mpv directly, and somehow JMP's player uses about 50% more CPU than mpv standalone does, and I don't hear any dropouts or see any stuttering on the same media. I get that a video player that's embedded in an application might have some overhead, but 50% is a bit much.
I get that Jellyfin is maintained by volunteers (I also maintain open source in my spare time, so I know how tough it can be to be responsive to user requests), but these issues are quite frustrating. I don't want to use something closed like Plex or Emby (which may or may not be better), so it's still the right trade off for me. And what it can do is truly amazing. I love that I can play things while I'm on the go, VPN'ing to my home network, and Jellyfin will transcode down to a crappy-enough bitrate to fit within the confines of my garbage Comcast upload speed.
This might be more the Chromecast's fault as I've had a similar experience with Plex.
Why on earth, when you go to 192.168.whatever:8096 does it ask you what server you want to connect to? Like.. THE ONE SERVING THE PAGE.
Just now I decided to connect to Jellyfin over tailscale and it's asking me to add a server; on 100.xxx, which is the jellyfin server which served the UI. And it doesn't seem to want to accept any answer as to what the server URL is.
This lets you connect to and play another friend's Jellyfin rather nicely. I think it's also so the HTML and JS that forms the web interface can basically be the app as well.
> And it doesn't seem to want to accept any answer as to what the server URL is.
Should be "http://192.168.100.xxx:8096" - make sure your jellyfin isn't just set to listen on localhost only though.
They've sort of conflated three different ideas - one, the non-browser clients are separate and need a way to select multiple servers from a common wrapper app; two, for development purposes separate the server of the UI package from the backend being accessed; three, have a server based application.
None of these items are uncommon, they are just commonly solved by making the separate front-end server an exception rather than a weird and senseless default. Most people solve this by making the dev mode case an exception.
Moreover, why not just add a button to the UI to automatically connect to the _UI serving server_ instead of having the user type it?
I love jellyfin, but this stuff is just terrible design for out of box experience or connecting from a new client instance, and it breaks when you're traversing a network boundary with something like Tailscale.
$ podman run --rm -it -p 8096:8096/tcp jellyfin/jellyfin
And I get the "Welcome to Jellyfin!" page, which lets you set the language/setup a user account. So I think in general if you are just running the OCI image it is not typically expected to see the server list. (I'm sure it's still possible to get to, and presumably you can wind up there if some RPC fails.)That said, I might've found a clue: if you re-run it, you get another randomized hostname, and then you get the server select page. If I clear cookies and reload, it again skips the server select page. So it seems like if you have the hostname of your jellyfin instance change, say, by starting a new Docker container with a different name, but have it accessible at the same place, that might cause this weirdness.
Other issues may include improperly configured reverse proxies. (If you're using a reverse proxy, you should make sure it's configured right for Jellyfin's websockets and CORS usage and potentially some other stuff.)
I don't know what the answer is, but I ran into this when I was trying to harden my systemd settings. I'll link my override below and maybe someone can give something more conclusive (and any suggestions to my override or for other services are greatly welcomed. I'm happy to add even ones I don't use). Where I hit this error was when messing with RestrictAddressFamilies, which are network socket addresses. For example, when I restrict AF_PPPOX or AF_UNIX I get that issue. IIRC I also hit that issue when I had moved a file, but I forgot which one (I noticed it got autogenerated again). So I suspect it has to do with access to some file location where it stashes a config file. Fwiw, this works with tailscale just fine.
https://github.com/stevenwalton/.dotfiles/blob/master/skelet...
(docs for RestrictAddressFamilies) https://www.freedesktop.org/software/systemd/man/latest/syst...
* It's always been quite slow and flaky. Library not scanning things, media library not connectable, etc.
* Often very long delay from starting a show until it actually plays. Often very slow scrubbing/skipping.
* The automatic subtitle downloading never works. The manual subtitle downloading never works.
* The UI was getting on my nerves trying to offer "recommendations" — I download my own stuff and don't need an app to try to push my own media through some kind of algorithm that's broken — and constantly promoting the Plex streaming service.
I got fed up and set up Jellyfin with Infuse as the client. Now shows start immediately with no buffering delay, never have any glitchy library issues, and the subtitle downloading just works.
My main issue is that Jellyfin's matching can be quite poor. It often doesn't understand when episodes belong to a show. Also, Infuse's UI is pretty bad and doesn't align at all with how I think media should be accessed.
Nobody is personally insulting the devs as being lazy or incompetent. The devs can listen or not and they should have absolute control on what they implement and when. Its entirely reasonable that things they think are fine are pain points they don't realize exist because they've just gotten used to them. They also might not realize that some "wouldn't that be nice" thing they were thinking about implementing in the far future is actually something a lot of people want in the near term instead. There might also be things they just never even thought of.
The users of the software with criticism also aren't forced to use the software and should not be expected to implement anything they want unless they want to contribute. The project being open source ensures that in the future the project can be continued, if someone wants to continue it.
And as a user of jellyfin myself I don't think these are particularly fair points of criticism.
The highest quality software has always been FOSS, outside of specialised niches.
In my experience, the majority of people who complain loudly about Jellyfin are tied up in the Plex ecosystem and cannot fathom leaving it for some reason.
I mean, imagine living with ad-supported streaming content being injected into your private instance by default and having to tell your users to opt-out of that. Admittedly, it is hard to leave such a slippery slope of an ecosystem, especially as a paying customer.
I have a 5.1 surround sound setup with Dolby atmos and 4k HDR 10 with Nvidia Shield Pro android TVs as clients. I have Blu-ray rips that play completely fine on Plex, but stutter, have no sound, or downscale to 2.0 sound on JellyFin.
There are some fixes that involve using a JellyFin server and a Kodi media client on Google TV’s. This does enable DTS and Ddd+ sound. While that technically works, it is very involved and feels like many more steps than just using Plex.
If you use a basic 1080p tv with two speakers and lazy encodes of media, Jellyfin probably works great for you. If you have anything a little more complex then you will inevitably see some problems.
This is similar to other open source projects like Ashai. The basic features are easy enough to build, but the more complicated use cases always require more time and effort, and people aren’t always willing to do that complicated extra effort for free.
On Apple TV, Infuse bridges the client gap. I personally prefer paying for a third-party client (for now) to paying for a media server that locks transcoding behind a paywall and ties my private server to a remote service. YMMV of course.
In the last week, most of the posts are pro-Jellyfin[0][1][2] - nearing anti-plex.
https://old.reddit.com/r/selfhosted/comments/1ilqh6u/one_yea...
https://old.reddit.com/r/selfhosted/comments/1ip8twc/jellyfi...
https://old.reddit.com/r/selfhosted/comments/1iaqqv9/jellyfi...
Plex users are all people who are fine self hosting and all the problems with that. Plex lifetime pass holders are invested for 75 dollars. Nobody is entrenched or unwilling to switch if something is better.
Maybe some people also run AdGuard/PiHole on their entire network and block all of the injected ads/tracking that Plex and your employer inject into our lives. We know that companies will always have people doing negative things and try to take the good and fight against the bad.
Maybe you are just overvaluing something that most people don't. Or its a problem only if you just lay down and let advertising invade your home.
I don't really care about the free part though. If I could pay for Jellyfin and it would be better, I would happily do it. I pay for Infuse so I have something usable on Apple TV even though Jellyfin itself is free. I don't care if other people don't pay for it.
I would rather pool various other people's money who have the same perspective as me to allow one of the Jellyfin contributors to prioritize and perform changes in the project that I and others value, which raises the boat for all. There's no world in which I am going to learn how to contribute to Jellyfin to fix something fundamental about the Jellyfin architecture, for example. It would take years to even get buy-in from the core contributors to have that access. Maybe I could spend a few months and clean up minor UI things or something, but what's the good of that?
I see this take a lot, where a project being free / OSS means that no one should have an opinion on it or that if they don't like something, they should fix it themselves. That's literally what money is for, so I can transfer wealth for some benefit to someone who is better at something than I am, so I can spend my time doing things I'm good at. Nothing about that prevents Jellyfin from remaining FOSS but at the same time, making improvements and receiving and prioritizing community feedback.
That's still a donation and shouldn't come attached with any expectations or obligations on either party. So, it may not be the best route to influence their roadmap.
DigitalOcean & JetBrains are listed as their sponsors. If you are their customer, you can share feedback on how much you appreciate their support.
1) better tone mapping, allowing me to watch HDR movies on SDR without it looking bad.
2) Plex, on my variety of clients, had regular issues with audio out of sync. I’m very sensitive to this and it drove me nuts. I have no issues with Jellyfin. I fiddled with all kinds of platform and Plex settings but couldn’t find a solution that solved it for good.
3) It’s easier to access Jellyfin over Tailscale. Plex’s normally clever way of exposing itself to the Internet gets in the way. It’s not impossible though.
Having said all this, Plex has better client UIs by far. They’re well organized, feature rich, and generally bug free. I still run Plex and plan to at least for the DVR functions.
Doesn't happen very often, but it's usually with older format video files.
Eeesh.
what’s even a point of jellyfin/plex if you have access to a player like Infuse on apple devices or Nova on android
I've previously reported this to the developers of the app, and they've closed the issue saying it was a bug in one of their dependencies, without fixing the issue. It remains unfixed.
I've never really understood why it's a desirable feature to have automatic HDR-to-SDR in the first place. No one is making HDR-only content and the official SDR master for every movie and TV show done by a human is always going to beat a fancy LUT.
When performing colour grading you're always deciding what parts of the image need what amount of contrast etc. based on what's important to see in the context of the scene. When grading to HDR you're going to make different choices simply due to the fact that you have a wider dynamic range available. Even putting aside the fact that you're not starting from the same raw inputs that the production studio is working with, automatic tone-mapping is never going to be able to look at a scene in the same way that a human does and decide which parts are important and which parts aren't.
Just as an example since I didn't include one before: Which of the two below images using different algorithms is correctly tone-mapped? Do we care more about showing the details of the car and the driver or do we care more about the rest of the scene? It's simply not possible to decide which of these is better without context, which an algorithm will never have. A human watching the scene can make that decision, or pick something completely different.
https://user-images.githubusercontent.com/41094733/105145848...
https://user-images.githubusercontent.com/41094733/105145851...
Acquiring, storing, and organizing multiple files for the same video is a hassle. Even more hassle is asking others to know which is the right one for that TV.
I want to have one and only file that will optimally on my main device (HDR) but which also work reasonably well on a secondary non-HDR device.
What I haven’t found is a way to restrict access to known devices, such as MAC address, so that big companies don’t sue me to death. Yes, I know Jellyfin has a login prompt, but I would prefer better security beyond Jellyfin as a just in case.
I use Wireguard for my private online stuff, that works nicely. Expose Jellyfin only on the loopback address and use Nginx to forward your domain to it, then setup your DNS entry to be the VPN address of your server. Just be aware that if you have your own local DNS server then you might need to configure it to allow serving up DNS entries with private network addresses in them, as these are often blocked for security reasons; or else just modify your /etc/hosts equivalent to manually add the mapping.
Does it require you to run a VPN app on your phone constantly and does that cause troubles?
It's not ideal, since the password's obviously saved in any user's browser history, but it's less of a pain than dealing with a VPN, especially since I let friends use the server, and it's secure enough for my threat model.
Hopefully you at least have something like fail2ban installed?
My threat model does not include someone using an nginx zero-day to find out what movies I'm watching.
If you don't have the confidence to open up port 443, that's fine of course, but I have the confidence in my abilities and setup to open up 443 and know that it's secure enough for my threat model.
Like, the nginx config is a single location block with a 30-character-plus random string in the path as the password, it's running on nixos with an automated `nix flake update` bot that updates and redeploys the server every week so nginx and linux get updated over time, I get an email if the `nixos-rebuild build` fails after the automated update so I know to fix it.
I'm not particular worried about automated scanners.
It's super simple to set up, you can do it in 15 minutes. Install Tailscale on your Jellyfin server and on your personal devices, create a tailnet and connect them to it. That's it, you're done. You can now access Jellyfin from any of the devices using the Tailscale IP or hostname of the Jellyfin server.
Unfortunately, oauth doesn't work since the jellyfin clients (like the android tv client, iOS client, etc) don't understand oauth.
Using VPNs is annoying if you want to share it with a friend, or you want to use it on a random third-party device, like a TV in a hotel or something.
I think all Jellyfin clients all support appending a path to the URL, so adding a password in the form of a long random path works pretty well in my opinion, i.e.
https://my-jellyfin-server.com/ahY9eig3/
And you can then just have the server return 404 or such to all other requests, you can send the link like normal to friends, and you can manually type it in if you need to.That should be enough to avoid some random copyright scanner.
1. the UI jank. The thumbnail tiles are slow to load, even on a local network. Searches and filters flicker as you type and take a while to return. Scrolling fast in the web UI gets choppy/laggy.
2. The native app (at least in the case of Apple TV) is either nonexistent or terrible. I've been using Swiftfin since it was one of the first alpha versions, and it constantly lost pairing with my Jellyfin instance. When it did work, which was very cryptic and usually required re-enrolling the client every time, it would randomly fail to load things, and the UI was very choppy as well. I haven't used the native apps on other platforms, but I imagine they are equally or more janky, because the Apple TV is comparatively very beefy hardware-wise vs. most other platforms.
3. The polling for new media is slow. I upped it to 10 minutes (the quickest possible setting) but I shudder to think what a full scan of a media library every 10 minutes is doing to my disks. Why doesn't it use file watchers and webhooks for new content notification?
4. The homepage has very little actionable info and doesn't work for browsing. It's not like Netflix or any of the other services where you can boot it up and see a bunch of different categories, as well as your "list". It has playlists, but you have to drill down to see them. You can go to "Movies -> Suggestions" and it has a little bit, but nothing like Netflix does. No real recommendation engine.
5. You have to maintain your own trailers or use an app like Infuse that can download its own trailers.
6. You have to separately configure tiles to be rendered if you want a nice seeking experience where it shows a live preview as you scrub through the timeline.
7. Movies and TV Shows are separated even though pretty much every other platform doesn't separate them, which requires you to click into one of 2 options before you can do almost anything.
That said, it's still far better and less janky than Plex was before I switched, and Infuse actually plays back HDR / Dolby Vision content correctly.
Does anyone else have qualms with Jellyfin? And how does Plex compare to any of these gripes?
Edit: New media shows up for me pretty much straight away without having to do anything. Not sure what's happening there for you.
Unpinning the trash every few months gets tedious. It turns out, I want the stuff I pinned, not anything else.
My biggest gripe is the sometimes hilariously strange behavior picking artwork:
https://github.com/jellyfin/jellyfin/issues/10494
Other weird things I have been able to DIY. I wrote my own auto-updater and Live TV listing grabber.
You can use Ersatztv to create an automatically updated playlist, based on a Trakt or IMDB list. Back in the day, there was/is a a cool addon for Kodi called “PseudoLiveTV” and these apps replicate this functionality.
So you can have an always updated Christopher Nolan collection, Halloween movies, westerns, 24/7 90s cartoons, BBC nature documentaries or whatever.
You can pull any imaginable tv or movie list from Kometa using Ersatztv:
See here for one idea: https://youtu.be/Ibaj6NiS8xM?si=eiPhTzZuwGAwa8Id
So I am literally streaming ATSC channels from my roof antenna with JellyFin. I didn't feel like paying a subscription fee (and anyways - no paid service has exactly the right XMLTV format JellyFin expects), so I wrote a scheduled task which scrapes the listings and ingests them with the REST API.
2. https://github.com/jellyfin/Swiftfin/issues/776
3. If you use radarr/sonarr, you can add Jellyfin as a connection. When they import a file, they will notify Jellyfin to process it.
My server running Jellyfin has something setup with the kernel that it notices new files almost instantly.
For 1, 2, 3(?), 4, you appear to be referring to the Apple TV client, which is written in an entirely different language and frameworks, and entirely different authors. (This is due to the excessive limitations on languages put in place by apple in their ecosystem).
Jellyfin has dozens of other platforms.
In regard to #3, Jellyfin does use file watchers.
For #5, there is a setting to grab trailers. Additionally, if the default metadata providers aren't getting you what you want, there is a baked in library of more than a dozen alternative metadata providers and a variety of other things you can use to augment what your media library provides.
For #6, I'm not sure if you're just referring to the Apple client again, but I'll add that the "Jellyscrub" feature is turned off by default, but if turned on, it will automatically generate video scrub images.
For #7, idk. I guess it's a stylistic choice? Why is there Sonarr and Radarr?
Anyway, I'm just a user, but, I'm also a Jelly-stan. So, I'd highly recommend you browse through the configuration options a bit more, particularly in regard to plugins and the many settings available in each of libraries' individual configurations.
When I say there is UI jank and lag, what I mean is that content re-renders and shifts around when you search, results flash in and out with loading animations. the placeholder tiles are clearly visible and I can see the tiles loading in when I scroll. This happens in both the web client and Apple TV. I believe the issue is the API design that’s dictating how clients fetch and load data, some virtualization in the frontend implementation, and a lack of prefetching/caching.
I have a 10 gig network to a very fast NAS setup and a very small media library. the image assets should be able to be cached/streamed/prefetched from the server so that I do not ever see a placeholder tile (maybe if you jump ahead like 1/2 the library, then that makes sense).
Perhaps this is one of those things where people haven’t seen what’s really possible performance-wise from a local server and they’re OK with something that feels like a webpage. But nothing feels like a native app that just has all my content there all the time. It feels like a remote service even though it’s < 1 ms away on a hardwired multigig network. Does that make sense? Do you agree with that?
This myth that Apple's ecosystem is so stifling isn't shared by the expansive developer community who work on Apple devices. It's far from perfect, to be sure, and they may overreach with some of their more stringent security and privacy controls (but none to my knowledge outright prevent apps like Jellyfin from being competitive). If Jellyfin wanted to release a high-quality app for Apple devices, there's nothing really stopping them.
I don't mean to suggest that your primary motivation for your opinions re: Jellyfin on iOS are the result of blind fanaticism, I'm certainly not saying any of this out of some tribal loyalty for Apple, either. The frequent partisanship surrounding Apple and Microsoft/Android has always been strange to me. Among the devices I use every day are a custom-built Windows 11 box, an M2 Mac Mini, an older PC running PopOS (Ubuntu-based), an iPad, and a Google Pixel. They're all tools, and they excel in their own areas. I like some things that aren't available to all platforms, and attempts to find reasonable alternatives don't always prevail. I like my Windows box for MS Flight Simulator, Remote Desktop Manager, and Visual Studio. I like my Mac Mini for Logic Pro, native Bash terminal, and DEVONthink. I like Linux for its infinite versatility and freedom. I like Android's customization, and Apple's unbeatable device/OS integrations and sync.
I can scroll through a page of >1000 movie cards and there's no choppiness or lag at all in the webUI. The cards have blurhash placeholders until the actual thumbnail loads, which is always very quick.
Swiftfin for the Apple TV is admittedly very barebones and can be choppy when scrolling through big lists, but it has never lost pairing or failed to load anything for me.
New media shows up pretty much immediately for me. Did you disable the "real time monitoring" setting in your libraries? Jellyfin will use something like ionotify or whatever your platform/fs supports when it's enabled.
"separately configure tiles to be rendered" is one checkbox, assuming you're talking about trickplay images, which was a recently added feature and I think is enabled by default for new installs.
The media detection thing might be related to Infuse and not to Jellyfin itself, since it sounds like everyone else isn’t having this issue, which is good to know.
You could also try setting up directplay, if your stack supports that.
Lastly, it might just be a limitation of your host hardware. What are you running your jellyfin server on?
The web UI is fine and snappy and using Infuse on Apple TV is simply delightful.
The server uses file watchers to update the media library very quickly and is light on resources.
I don't need a recommendation engine because... it's my media library, presumably I added things to it that I want to watch.
And most importantly, it's open source and not likely to get enshittified in the near future like Plex.
It’s one of the few apps I’m happy to pay the subscription cost for. Well worth it for a well made AP.
Not trying to make this sound like an ad. It’s just a legit good app.
Infuse is generally really good, but I wish it had a way to expose slightly more power user features such as: viewing detailed file info (codecs, resolutions, audio-video bitrates, stream info for all streams), ways to create arbitrary dynamic playlists/folders based on conditions, and viewing current stream debug info (MB/s, cache fill, ram usage, disk usage etc). Any debug info would be helpful when some files seem to kinda work but then crash Infuse. For example some 4k/6k/8k ProRes content at around 800Mb/s. Network/NAS isn’t the issue as it’s hardwired 1Gb/s. So then I don’t even know if some specific variation of ProRes (or every) is just unsupported on the appleTV and it goes into software decoding, or whether the AppleTV is oom-ing, or what exactly is wrong.
Worst case you may have to pay for Infuse another year, although it would have felt better to donate to the development of the Apple TV app instead
You can put these into "collections", but it'd be nice if my library could just have a "Star_Trek" directory and then subdirectories with all those things inside, and have it automatically sorted out by JF.
I have also built two things on top:
A super simple PWA for my kids to use: https://github.com/philips/jellykids?tab=readme-ov-file#jell...
A NFC card based player for my kids to use: https://github.com/philips/homeassistant-nfc-chromecast
It is so nice to just have my content on an API driven thing where I can control the UX my kids experience without a bunch of hassle.
But it is not as good as Plex currently. I have a lifetime pass and there is no reason for me to switch. I personally am fine with Plex adding features, so long as they are not taking anything away. They've had a couple missteps but absolutely nothing that would make me want to switch to an experience that is definitely worse.
I'll give Jellyfin 3 years and then reevaluate and see how I feel.
but it's still on my hard drive. if i can't log in to plex for some reason, i'll install jellyfin. or mount it as a network drive and play the files with VLC. it's not like they're locking away my content behind their authentication, all they're locking away behind that auth is my ability to access my media through plex.
https://www.howtogeek.com/303282/how-to-use-plex-media-serve...
It's a mere setting not to have to use cloud authentication within your home network.
I've had a decent experience with the Samsung TV (Tizen) client. It's annoying to not have it on the app store yet and to jump through the developer-mode hoops to get it installed, but to be fair it was a one time setup and I've been happy with it since then. Seen some occasional slightly janky menu navigation, but really it's been far better than I expected.
It doesn't work very well - frequently, the concatenation process is sitting there running long after the client has disconnected. And the devs seem to break it entirely every second release or so, just failing to recognize the BDMV as a playable movie at all.
Secondly, a BDMV can't be turned into a single correct linear representation - for example, the Star Trek TOS discs have the ability to toggle back and forth between original and CG-remastered graphics seamlessly. As another example, I have stereoscopic 3D blu-rays; should the transcode be the left eye view, or side-by-side 3D with an ultrawide file?
Finally, transcoding necessarily sacrifices quality. Remuxing wouldn't, but Jellyfin usually refuses to stream remuxed containers and insists on transcoding to attach subtitles (their javascript web player and even app don't seem to handle the subs correctly?).
To sum up, turning a disc folder into a single file requires losing content.
The stuff that Jellyfin would provide - being able to watch from a device using just a web browser and no client install - is nice-to-have, not need-to-have.
Also, if you do ever want to remux those discs, mkv does support both those features now (player support is lacking though). You'll want to look for "3D MVC" support, and including 2 video tracks in one mkv is no problem.
I don't believe that mkv supports bd-j menus. Happy to be proven wrong on that if you have some further reading I could do.
Remuxing them can be done a NUC-class CPU. Transcoding them requires hardware support to do in real time with today's hardware, but the hardware support is quite light - an AMD iGPU can chew through a 4K BDMV no problem, so long as the codecs on both the input and output side are supported for acceleration.
Jellyfin tries to prefer Intel Quicksync for some reason but it works with other GPU accel too. The problem isn't the performance envelope, it's how poorly the code is implemented on the Jellyfin side: it's not reliable at starting and managing the concat process, and it forces a transcode to embed subtitles for no logical reason I can see.
I'd prefer using Tailscale so that I can also access it in their native apps on Android and Android TV.
Yes Cloudflare Tunnel can work with Jellyfin apps, but: 1) this exposed your Jellyfin to the world, and you are one vulnerable away to get owned, and 2) like other sibling posts mentioned, this is against their ToS to host streaming service on free plan on their platform.
Honestly, Kodi is even a little more heavyweight than I need, but I've been using it since long before the XBMC->Kodi name change and have been happy with it.
I use it in a docker container, if that makes any difference, and my use case is almost identical to loughnane's mentioned up-thread.
Looks like I could use some combination of Caddy, Nginx Proxy Manager, Tailscale? What's the simplest setup?
$HTTP["host"] == "jellyfin.dc" { proxy.server = ( "" => ( ( "host" => "192.168.1.99", "port" => "8096" ) ) ) }
Personally I don't muck about with any of that and just have a link in my bookmarks bar that takes me to http://<tailscaleip>:port :D
I’ve got pihole running so that’s my home dns server, I have custom domains with a home-only TLD (I think “.internal” is cleared for use now?). So something like https://plex.homecloud.internal can load up plex, I can only assume jellyfin could do the same.
I’ve actually been using ZeroTier instead of tailscale for external access and I’ve been very happy with it, but I know lots of people love tailscale and I’m sure it’s great too
# cat /root/.cloudflared/fbsd0_tunnel.yml
tunnel: <redacted UUID>
credentials-file: /root/.cloudflared/<different UUID>.json
ingress:
# Example of an HTTP request over a Unix socket:
- hostname: <redacted full cloudflare URL, no port appended>
service: http://localhost:8096 #this is where jellyfin would normally run
# Example of a rule responding to traffic with an HTTP status:
- service: http_status:404 # kijkbuis.example.org
server {
listen 80;
listen [::]:80;
server_name kijkbuis.example.org;
include /etc/nginx/snippets/enforcehttps.conf;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name kijkbuis.example.org;
ssl_certificate /etc/letsencrypt/live/kijkbuis.example.org/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/kijkbuis.example.org/privkey.pem;
set $jellyfin 192.168.1.51;
resolver 192.168.1.1 valid=30;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
# the google-related domains are there to enable chromecast support
add_header Content-Security-Policy "default-src https: data: blob: http://image.tmdb.org; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' https://www.gstatic.com/cv/js/sender/v1/cast_sender.js https://www.gstatic.com/eureka/clank/108/cast_sender.js https://www.gstatic.com/eureka/clank/107/cast_sender.js https://www.gstatic.com/eureka/clank/cast_sender.js https://www.youtube.com blob:; worker-src 'self' blob:; connect-src 'self'; object-src 'none'; frame-ancestors 'self'";
location = / {
return 302 https://$host/web/;
}
location / {
# Proxy main Jellyfin traffic
proxy_pass http://$jellyfin:8096;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Protocol $scheme;
proxy_set_header X-Forwarded-Host $http_host;
# Disable buffering when the nginx proxy gets very resource heavy upon streaming
proxy_buffering off;
}
# location block for /web - This is purely for aesthetics so /web/#!/ works instead of having to go to /web/index.html/#!/
location = /web/ {
# Proxy main Jellyfin traffic
proxy_pass http://$jellyfin:8096/web/index.html;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Protocol $scheme;
proxy_set_header X-Forwarded-Host $http_host;
}
location /socket {
# Proxy Jellyfin Websockets traffic
proxy_pass http://$jellyfin:8096;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Protocol $scheme;
proxy_set_header X-Forwarded-Host $http_host;
}
}The end result is a valid HTTPS experience inside the network and outside (as long as tailscale is active on whatever device I'm using). And if I decide to ditch tailscale it's just a matter of mapping ports 80 and 443.
https://github.com/mikew/homelab/tree/public/services/revers...
https://github.com/mikew/homelab/tree/public/services/dns
https://github.com/mikew/homelab/tree/public/services/tailsc...
The Kuma example here is decent. Replace kuma image and ports with jellyfin. https://www.elliotblackburn.com/how-to-use-tailscale-serve-w...
Again there are probably easier options to get it running but in my case most of it runs on docker so (in theory since I had no major outages just a few times I migrated hardware) moving/restoring from backup is relatively easy - copy all the files and run `docker compose` in each directory.
There was a point where I could overlook some of these things but watching media is something that I want to feel slick and personal, and troubleshooting really kills that for me.
Plex + AppleTV for me and my folks has been a rock solid setup for us.
I really appreciate alternatives (especially OSS) like Jellyfin though and take a gander at them ~once a year.
The whole *arr thing makes it even better with automated download and upgrade.
Casting from my phone also got de-synced & broke a lot. I couldn't find a good way to skip/scrub forwards or backwards a little bit. Sometimes the themeing would break & the app became unusable without restart.
It was really really cool having jellyfin-mpv-shim running on my desktop, and Chromecast elsewhere. But Jellyfin was straight up not working for me, not listing a bunch of my media, not making it navigable, and the Android app's dodginess all ruined things for me. I went back to UPnP/DLNA, whose apps are a little cruder (Gerbera for MediaServer, BubbleUPnP for control, Rygel PlayBin for MediaRenderer), everything basically just works and it's baked into many devices/tv's.
Jellyfin fixed that. Other people in my house use it easily, a friend uses the web ui over Tailscale, and my messing-with-tech versus watching-things ratio is finally looking good.
But I can live without that.
The one thing it offers that folders do not is a simple way to interact with the video library when guests are using it.
They can grab a mouse and meander over the available shows with no explanation and watch what they want within minutes of being shown the link without exposing my nas to them or giving them the ability to alter my media files without my knowledge.
We ended up buying an apple tv and installing the vlc app which connects via smb and is happy to show us the original folder structure.
I have an Nvidia card which is more than capable of transcoding. How long does yours take to switch?
With the Plex Pass, it was a one time fee (Lifetime Membership), and I've been enjoying it since (6+ years). I use CPU for transcoding.
Well, to be frank, even Plex's DVR could be better (e.g. I tell it to record a certain TV show, but I can't tell it not to record certain episodes, etc). I imagine other services do better on that count.
But my memory was that Jellyfin was terrible at it.
But Jellyfin is just not good. The clients are all afterthoughts and audio pass-through fails to work on every device I’ve tried it on. 4K HDR studders like mad, when the same video plays perfectly via Plex (no transcoding)
I’m convinced that the people who “love Jellyfin” watch it using their phone or laptop. Where sdr and stereo audio is all they’ve ever known.
I’m rooting for Jellyfin, but they have a long way to go. I wish they’d focus on a unified client experience and stop adding junk to the media server.
My main gripe is with how hard it is to actually get it to find the files - you can't just feed it a folder full of media and expect it to play it, it needs to be some carefully crafted structure that I haven't yet fully figured out. So instead of dropping a file then watching it on the TV, I drop it, try to watch it, then have to go back to the PC to fiddle.
but it still lacked some of the features that made me stick to plex (over VLC)
It'll become better over time, and probably much better than plex. plex dont do many new features, and there's still a ton of issues with it (like... audio is at like -50 dB and you cant hear shit)
Most of my issues are with the Auth system and random log outs, but I suspect that's my own network.
I have ~2000 movies (21TB), 435 shows (22TB), ~26000 songs (1TB); all running on an Intel 4770k w/ 32GB of RAM, a SATA SSD for the Jellyfin database, and a Tesla P4 for transcoding. It works well now and even worked decently before switching to the Tesla P4 for transcoding.
https://jellyfin.org/docs/general/server/transcoding/
I recently setup Jellyfin pretty thoroughly on a small form media centre with 4 x 2TB SSD drives for the media and went through all of this for direct to TV, via client to iPhones and to an XBox etc.
I passed that on three weeks back to a son for his household so I don't have local server to log into anymore and double check (the documentation online tends bear an approximate resemblance to current versions).
This might also shed some light : https://forum.jellyfin.org/t-purpose-of-force-transcode-in-u...
as it talks about the manual editing of the preference | option files for servers and users.
You can disable transcoding for a specific device (or user). However, it just means that the client will not show some videos, even though it can play them in reality.
This is determined by the device profile shipped with the DLNA plugin (!). You used to be able to replace that, but that broke for me with the recent changes wrt DLNA.
I don’t even mind transcoding, except that it also maps hdr to sdr, which is just awful.
So I now use jellyfin on computers and mobile, and a minidlna setup on my main tv. That's ridiculous, but seems like the only way to make it work within the hour or two I had for that.
The Jellyfin documentation is poor and lags. I would screen shot what I worked out for myself but that ship's sailed and moved on. I did have to tweak some profiles but ultimately I got all media playing on pass through with no transcoding so it is doable.
My apologies for not being in a position to cough up details, that was my second pass through Jellyfin, I now like it much better than I did the first time through. If I set up a third instance for someone else I'll take to the time make notes and maybe feed them back into the community docs (if they're relatively easy to update).
But do note — I had this working until DLNA support was removed from core in 10.9.0, which released in May last year. Maybe your experience predates that?
I should probably just downgrade.
https://www.dmlp.org/legal-guide/circumventing-copyright-con...
> In the end, I'm mystified it's still so hard to buy older movies so I can watch them on my networked devices. You'd think Hollywood would've learned from the music industry that if you just let people legally pay for non-DRM media, and make the process easy and convenient (certainly more convenient than sailing the seven seas or ripping discs), people will pay.
https://www.jeffgeerling.com/blog/2022/how-i-rip-dvds-and-bl...
Somethings like playback resume don't work but for me it's a nice middle ground.
Probably supports many more, for the collection here the thumbnail browsing, presentation, metadata display etc. isn't bad (MusicBee does it better) but as a media support under the Jellyfin umbrella component it's not the worst.
It's weak on support of FullAlbum.flac with TrackIndex.Cue arrangements though.
MusicBee present those as individual tracks with jump to track and shuffle options whereas Jellyfin (as of today) has them a single blob of audio start to finish.
Cue support is on the issues list (although issue support has a slow turnover thanks to the small time).
Any bored audio format programmers looking for open source support credits??
It supports drilling down by Album Artists which is a minimum requirement for nay big and diverse music library. Genres seem to work fine, you can select one and it will at least list all albums under that, but no option to change the grouping to artists or something else exists.
The web interface does ok at first when loading a big playlist. For example, trying to play my OC-Remix collection which is essentially an album composed of ~4k songs works for the first few songs and moving around the playlists is somewhat smooth, but picking a song at 1000 place or so just awaits forever. I don't know whats up with that.
The playing queue is very terse and doesn't like listing the track number, artist nor even the album (it does show a thumb sized album art for each entry but good luck with that). This is a very dumbed down mobile centric design, could do much better here...
All in all I would advise just trying out more than one media server. Jellyfin is ok-ish for music and great for videos but if you are gonna go trough all the work of setting that up it doesn't cost much more to also setup something like Navidrome which will give you a decent subsonic instance which is compatible with many clients and will likely give you a better experience when handling big and diverse music libraries. That said, Navidrome's built-in web client is pretty bare-bones, so you are gonna have to rely on the "native" clients more.
For example, you can use Strawberry's subsonic feature to access your Navidrome's library on a pretty damn good interface for music nerds who feel comfortable on "spreadsheet" like interfaces. No tag editing, but you don't usually want to expose your library with write permission on these services anyway. But it does pick up on tag changes if you tell it to a complete re-scan which takes ~15 minutes.
Not sure if you need some effort to "convert" your library to this structure.
[1] https://jellyfin.org/docs/general/server/media/music/#discs
But I'm AMAZED to see the phrase "Free Software" in an HN link description.
Thank You jellyfin.org!!!
My entire jellyfin library is just symlinks into where my crap has accumulated over the years.
* Avoid special characters such as * in M*A*S*H, use MASH instead.
Since when a common ASCII character is a special one? What about more common unicode characters I use?
* Do not abbreviate the Season folder with S01 or SE01 or alike.
I.e. if I put anything not in the folder named "Season XX" it won't work? Ugh... really?
* Season folders shouldn't contain the series name, otherwise Jellyfin can in certain cases (Stargate SG-1 due to the dash and one, for instance) misdetect your episodes and put them all under the same season.
Well, how about to fix it?
* Episode numbering for specials may vary from metadata provider to metadata provider.
Very helpful, so the "Series XX" required above won't always work.
And even if everything above fails why not to sort by name? It should not be hard for any engineer, right?
Genuinely curious.
When combined with `yt-dlp` you can use it to download videos from your favorite channels. This is especially valuable as there's no guarantee the videos will be there for free forever.
It's also a nice place to put family videos and recorded sporting events.
How is av1 support on jellyfin?
AV1 playback works on devices that support it. You'll need server-side transcoding for devices that don't. Jellyfin can do this by shelling out to FFMPEG, which can optionally use hardware accelerated codecs if they're available to it. So basically, "it depends", but Jellyfin itself supports AV1 media.
This is obviously useful in general, but i rely on it to run a media server on my low-end minipc with Intel Quick Sync.
Then came jellyfin, and as a breath of fresh air, all my problems were gone. In maybe 2 years since I switched to it, I can count on my fingers how many times did I have to fiddle with it for some reason. It just works, in the most common sense of ways, no crashes, no discoverability problems, nothing, just pure stable performance, I cannot emphasize enough how much of a chasm exists in quality and usability between jellyfin and UMS. While UMS feels like a piece of early alpha software that was abandoned, jellyfin is the rock solid , actively maintained alternative that got your back.
Universal Media Server is just bad software.
I'm glad I never purchased a licence with the amount of useless stuff they keep shoe horning in.
Ideally, there'd be a program that lets you add programs to playlists (favorite films, to-watch list, anime, documentaries, etc.) and then track the watch status, shuffle-play, show recommendations, display a big grid, etc. There's probably something like that out there but for a newcomer it's just a blizzard of "Sonarr, Radarr, Umbrella, Jellyfin, Plex, Kodi, Stremio, Roku, Seren, Overseer, Syncler," and other nonsense syllables (and seems like most of the guides are dated).
(Nb: I subscribe to Netflix, Hulu, HBO Max, etc., just prefer having a unified player that doesn't yank stuff arbitrarily)