Show HN: Kyoo – Self-hosted media browser (Jellyfin/Plex alternative) (github.com)
I started working on Kyoo almost 5 years ago because I did not like the options at the time. It started as a "sandbox" project where I could learn about tech I was interested in, and slowly became more than that.
201 comments
[ 6.8 ms ] story [ 310 ms ] thread- https://github.com/skorokithakis/catt/
But I'm not aware of what the equivalent would be for Amazon-type casting
I wrote a wrapper around catt for playing music to my house speaker-groups. It also works with video but I don't cast video as often so that part might be buggy--in that case better to use catt directly
- https://github.com/chapmanjacobd/library
My only concern is that your screenshots on the github include copyrighted movies. I know that unlike popcorn time (or whatever the name was), it's only a player and not a way to download things, but maybe change them out for your copyright-free movies on the demo? I'd hate to lose another project to overzealous copyright enforcement.
The screenshots are pushed on a secondary branch, so I can remove them completely without rewriting the git history. Thanks for worrying <3
Does anything have feature parity with this? https://firecore.com/infuse
Most audio streams are 'direct stream' when you use plex/jf/emby as backend, but your receiver/soundbar only gets the PCM stream, without any object data (yes, you loose atmos, not that it is a lot of loss when using a soundbar, but if you have atmos speakers in your ceiling you want that data)
in an ideal world, the appletv will simply passthrough the audio upstream, so you receiver can do what it does best.
Most devices that will play video these days are powerful enough to do the decoding themselves and have the bandwidth available.
IME this varies a lot between devices. Google TV dongles for example, even the 4K versions, are built with extremely weak SoCs (as in early 2010s phone weak) and lean hard on hardware acceleration. If you want to play back a format that isn’t hardware accelerated on one of these, you’ll have to rely on media server transcoding.
You can tell Emby and Jellyfin to direct play. Pretty sure Plex has that option, but I've not used it in a few years so could be that changed.
Yep, it's definitely easier to get third party clients to implement your protocol. Kodi you can write your own plugins for, Infuse... requires their devs to care about your implementation. Chicken, meet egg?
That said, I also fully admit I have no knowledge of your codebase, nor any knowledge of how extensive / complicated the jellyfin (or any other comparable media server) client api looks like, and I assume you have a better idea!
Best of luck with this! I hope it succeeds!
I want to focus on features before writing more clients, I hope to write Chromecast support in less than 6 mounts and google tv in less than a year.
Does Kyoo take a similar approach, or is it more user friendly? Plex's monetization efforts are silly, but Jellyfin seems very much not ready for prime time.
I don't see the expectation of a standard naming format as unreasonable, given that it's open source and they're fairly short on developers
I'd probably use Jellyfin if it got the basics right and lacked a thing or two, or if its opinionated implementation was limited to trivialities like how Plex refuses to use local images not named cover.jpg. But it's too opinionated, too inflexibly, about too many things, and I think its opinions are stupid, so it crosses the line as far as I'm concerned. Doesn't help that the code is convoluted and I couldn't figure out how to make changes to the way it analyzes files easily.
It still did a great job and Picard nicely filled in the blanks.
I would like to see a slim Jellyfin that does not have any media management code at all, tbh. Just media streaming.
This is why I went back to iTunes. Full, robust metadata support and organization.
It's 2024. Why are people still cramming metadata into file names like it's 1983?
I get the frustration - Plex didn't do it in the past, but if you look at it from 1000 ft, and are ignoring history, Plex isn't doing anything crazy here. If you install the app on your phone/Roku/whatever, it's on you to understand how to use it/customize it.
It isn’t about the users being Plex users “even though I and they don’t want to think they are” (an incredibly presumptuous way to phrase that, honestly) it’s about a fundamental change in behavior and execution in their product.
Nobody said they weren’t within their right to do what they’re doing, but people should be allowed to point out when this happens. They are fundamentally changing the way their app works. That is an user-hostile action regardless of how you slice it. And that might be fine from their point of view, but it clearly is an issue for existing user, as this entire thread of comments shows.
It’s also brought privacy concerns, because there’s incentive for Plex to harvest and sell data from users paid and unpaid alike.
I’m currently subscribed, but all of this has me on the lookout for viable replacements.
I've been using Plex forEVER and the only time this kinda thing happened to me was when the scratch space Plex was using for transcodes and things got full
Also, everything in my library can be direct-played by the clients I use (primarily Apple TV 4k) too, so transcoding pretty much only happens when I’m loading up my iPad for a trip (once or twice a year tops).
The only monetized features that have decent overlap with user desires are the player features, mobile apps, plexamp and its sonic analysis stuff.
More importantly, that monetization strategy is a great fit for legal self-custody. I have a pretty large library of content I bought on DVD and ripped for personal use. I don't share it our as torrents and watch videos locally on my own network, there's nothing wrong with that and I like that Plex is still paid for the software that makes it work well for my use case.
Any paid software you can run on your own hardware by definition is paying to use "your own" resources(CPU, GPU, storage, etc), what you're paying for is their effort in creating and maintaining the software. If they want a gatekeep features for a premium version that's their right, if you have a problem with it find something else or make it yourself.
What kind of video is non-playable without GPU transcoding?
Get two copies if you want LoFi alternatives. Transcoded HDR 4k etc looks way worse than just having a 1080p copy
And what I'm describing is definitely a pro scenario, so charging makes a lot of sense
There are still some edge cases, especially with extra which are not handled very well right now. It works even for weird anime naming, things like "[SomeGroup] Jojo's bizzare adventure - golden wings 12.mkv"
On the plus side, lack of auto organize made me properly setup the complete arr stack, which throws things into correctly named directories, does support batch renaming for existing stuff, and handles a lot of other stuff on top of that.
I wish they would add a feature to clone the metadata database (including pictures of movie covers and actors). My fear is that imdb will disallow scraping especially for people like "my friend" who has thousands of movies.
> We're not afraid to bring in additional containers when it makes sense
That is one of the last things I'm thinking about when I choose a media organization and streaming app, and if I do think about it, having more containers is a red flag more than something that sets my mind at ease, because of that added complexity. I experienced this with Photoprism when I wanted to customize it a bit, because I then had to figure out the roles of the containers and which containers did and did not need the customization bits I was adding, etc..
Plex for example starts many transcoder instances within a single container for scalability. You don't _need_ to scale at the container level.
There's pros and cons to each approach, but for the self-hosting crowd keeping the deployment simple may broaden your audience.
A good example I have experience with is vaultwarden: people use it because it's a single container deployment as opposed to the complex and resource intensive setup bitwarden provides.
Would you mind eloborating?
- https://forums.freebsd.org/threads/install-net-sdk-6-7-8-on-...
- https://www.freshports.org/lang/dotnet
And it is up-to-date, props to the maintainers!
I wonder if publishing for FreeBSD without one is problematic if you use either single-file JIT (trimmed, self-contained) executables or NAOT ones.
But given it's a server, such workloads generally favour JIT so it should not be an issue but I understand what you are getting at. With that said, it certainly doesn't seem to be as easy as `sudo apt-get install dotnet-sdk-8.0` but not as bad as building everything from source (which should not be too bad still, build.sh in dotnet/runtime does a lot of work for you to be able to just clone and build and the repo also has instructions for building for FreeBSD).
It's not nearly as powerful but it can be a pretty good starting point before pulling in more dependencies.
[0] https://github.com/Cysharp/MagicOnion
[1] https://github.com/Cysharp/MemoryPack
It offers a very robust and tested queuing system, and is pretty tiny to run. It lets you keep things very simple.
I've been playing around with NATS, which is hovering at just under 10MB of RAM on each of 3 nodes, while passing an average of 1 message per second.
I am liking it, though NATS clearly has a less strict queue ordering policy when I throw a burst of messages at it.
Edit: actually another node is at 22MB, so take what you will from that.
C# is just a nice all-around language and the runtime is really nice.
By comparison every time I have to look at Java I just want to run away as quickly as possible. All the resources Oracle has, and instead of investing them into making Java a viable platform they shut down the one project that was giving Java an edge in Desktop Development (JavaFX) and basically leave Java in this weird limbo state its in.
It took Java forever to implement lambdas meanwhile C# had them in since .NET 3.5? (2007?)
Microsoft on the other hand, made all of .NET MIT licensed. Even if they change the license 10 years from now, you can pick any of the rich versions prior to use where the license was in fact MIT.
In recent years cross platform support has gotten fairly good as well
Jellyfin is an Emby fork though, yes.
[1]: https://github.com/zoriya/Kyoo/blob/master/back/Dockerfile#L...
I'm curious to know about scaling. How many users does a server (and of what kind) support? What's backing your demo page and how many users would overload it?
> It started as a "sandbox" project where I could learn about tech I was interested in, and slowly became more than that.
This is a fantastic reason to build something. Looks like a wonderful project.
I have Jellyfin setup in parallel for the day Plex enters an「enshittification」phase, but the lifetime membership I paid for in 2012 has served me well.
Have you had issues with it?
-plappa
-ShelfPlayer
It’s sad how true that is for many things these days. I usually download shows to have them in Plex even though I have many paid streaming accounts. Just because it’s a better UX and it also automatically scrobbles to Trakt.tv.
Interesting, I'm going to have to check this out. I've been using OpenAudible for this purpose (paid).
Jellyfin uses AAC, which then spins my homelab fans when I try to encode anything. With opus the fans stay silent.
Need a Spotify connect like thing for PlexAMP so it works in car at full quality. I won't hold my breath. Maybe the Plex web app works
We use plexamp with Android Auto, and with the usual car sound system 128 kbps opus is transparent. You can stream with the original flac quality of course, but I've found it to be way too much in our trips.
Streaming music with plexamp has never been an issue for us. It just works.
It would be silly to burn that energy just because it's the status quo?
I mean, I would prefer to avoid those stalls but still
--
If I had CarPlay I'd be happy car-wise. But Spotify/Tidal Connect means all of your devices become remotes. They all behave as if they're the player and have the ability to change where the output goes. It's really slick.
I admittedly have a car with lots of road sound, so maybe I'm not the target audience for lossless car audio.
I started building a Plex/Jellyfin clone in 2019 (around the same time it looks like!), got pretty far into it as well, using a pretty similar messaging system and everything (using ZeroMQ instead of Rabbit).
I was working for Apple at the time, and I wanted to open source it, so I had to talk to a bunch of management, eventually someone just two levels below Tim Cook, who told me that it was a "competitive" product, because it served video, and Apple sold video. He also informed me that if it's found out I open sourced it, I would be promptly terminated and would potentially face legal action as it would be in direct violation of my non-compete, and moreover since I was working for Apple they legally owned it anyway. He then explained that there's no such thing as "my own time", as Apple really wants me to be focused on Apple, and nothing else
I genuinely had to hold back tears in that managers office, because it really felt like a punch in the gut. I went in optimistic that I'd be able to open source my passion project, and I instead was threatened with termination and a lawsuit. I was so upset that I just left the office at 2pm and drove back to my hotel (I live in NYC but was visiting the California office).
Anyway, </rant>, this is cool and I will be playing with it tonight.
ETA:
I have no doubt that some people might be able to figure out the specific individual in this story, and that's fine, but I humbly ask that you do not post that person's name publicly here. I wasn't fired from Apple and I didn't have to sign a non-disparagement clause as far as I am aware, but I still don't want any extra drama from the company.
Yeah, they are really good at that. I had a friend discover a vulnerability once, and behind the scenes they took it very seriously. But publicly, they disparaged him mercilessly and even got DaringFireball in on it.
(Yes, he takes Apple money; of course he does)
I mean, I get it from the company's perspective. They have a product that serves video, you were building a thing that served video.
The thing that irks me is that since they build multiple operating systems and a wide range of software, literally anything you write and publish on the public internet is theirs simply because they will fire you and sue you into oblivion. Even if you _technically_ slip through a loop hole, they have more money and time than you do.
Stories like this remind me that I have to be careful about who I work for, the scope of that work, and where I publish it. Thankfully, I think I'm in the clear as long as I don't invent a thing that solves the traveling salesman problem.
They’re superficially kind of similar but, like, depending on how abstract we wanted to get we could basically say that anything is competitive with anything e.g. “Your product has text, and we sell books that contain text, so it’s competitive”
Regardless, I guess what they said worked, because despite me not having worked for Apple for more than three years now, I still don’t want to open source I am still a bit worried about being sued (especially since I didn’t leave on the best of terms with them).
That said, my current job is much more reasonable about this stuff (and also much more domain-focused), so maybe I’ll be able to dust off my public GitHub again some day.
(Again, I am sure you can figure out which company I work at (I have public profiles) but I ask that you don’t post it here.)
IANAL but I think they were lying to you.
CA law protecting your after-hours code from your employer: https://law.justia.com/codes/california/2011/lab/division-3/...
NY law doing the same thing: https://casetext.com/statute/consolidated-laws-of-new-york/c...
This company is completely ruined for me. Feels disgusting to have dumped nearly 6 figures into this company across a decade.
(this includes hardware, software, media, “App Store” purchases, merch, services, phones, music players)
It’s not much to the bottom line but to me I was in deep.
BTW, OP's anecdote is how it's always been at Apple. Definitely in the early 00's, and probably all the way back to the 80's. I've known a bunch of great open products die because the person behind them got a job at Apple and was not allowed to work on it while employed.
It worked fine locally but sharing via tailscale with a family member across the world somehow broke things. It took about a minute for the stream to start despite a fast enough upload speed. Might be ping related?
I will give this a try
Try changing Linux's default congestion control (net.ipv4.tcp_congestion_control) on your Jellyfin & reverse proxy servers to 'bbr'. I don't understand the details- there might be negative consequences [1]- there might be better congestion algos- but for me, this completely solved the issue. Before, connections would stall out to <10%, sometimes even 1% line rate. In quiet/optimal network conditions.
Also, Caddy enables HTTP/3 by default. I force it to HTTP/2.
I should probably investigate using later versions of bbr, though.
[1] https://news.ycombinator.com/item?id=37408406
I guess what started leading me down the right path was a more methodical approach to benchmarking different legs of the route with iperf: Client <-> reverse proxy, reverse proxy <-> jellyfin server. I started testing those legs separately, w/ and w/o Wireguard, both TCP and UDP. The results showed that the problem exhibited at the host level (nothing to do with Jellyfin or the reverse proxy), only for high latency TCP. The discrepencies between TCP and UDP were weird enough that I started researching Linux sysctl networking tuneables.
There might be something smart to say about the general challenges of achieving stable high throughput over high-latency TCP connections, but I don't have the knowledge to articulate it.
Ripped from DVD the night before, Make snacks, scroll down list of filenames, series and watch.
Never understood why I've needed a whole Netflix interface when I just want to watch a movie.
Is the expectation to read an ebook on your TV? Or is this specifically for reading on your phone or somehow streaming to “ebook readers”?
Go to app, select book, download to device. Same as I would do with a tv show or movie.
I'm assuming you meant to say you re-wrote it in Go.
> seek effortlessly without waiting for the transcoder
Depending on the container and codec this was always an issue. How did you solve that problem? are you not using libav?
would love to be available on ios tho x(