11 ms·
Show HN: Kyoo – Self-hosted media browser (Jellyfin/Plex alternative)
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.
- stop50 3y agoIt looks very nice
- nyolfen 3y agoit looks very good! is it possible to cast to a tv? this is the only thing that has me stuck on plex, which i otherwise do not like
- beepbooptheory 3y agoCasting used to be pretty bad on Jellyfin but is a lot better these days. Don't remember the last time I had any friction with it.
- t0mas88 3y agoThe Jellyfin Android TV app had a lot of improvements over the last year or so. But they're still working on a new playback approach that works better with transcoding of audio and HDR/4k for compatibility with devices. Because it works now maybe 95%, but that really annoys users when they try to watch some of that 5%...
- zoriya 3y agoNot yet, I plan on having that available in the next 6 months since it's pretty important, but I want to have most client features finished before that
- unstatusthequo 3y agoLoad on Mac browser, Airplay to AppleTV. Same idea with Windows and *cast.
- nyolfen 3y agoalas, i am the guy on a linux desktop
- xk3 3y agoYou might want to look into catt for Chromecast: - https://github.com/skorokithakis/catt/ 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 https://github.com/chapmanjacobd/library
- bunnyfoofoo 3y agoIt's very pretty, and the demo is very fast. Is there series tracking to continue watching to pick up where you left off? It doesn't seem like there is on the demo. 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.
- zoriya 3y agoThere is a series tracking (which can be autosynced to simkl if you want) but you need to login to use it. Since the demo allow you to access everything as a guest without account you probably missed it. The screenshots are pushed on a secondary branch, so I can remove them completely without rewriting the git history. Thanks for worrying <3
- grobibi 3y agoI would like to switch from Infuse to open source but I can't go back to transcoding. Does anything have feature parity with this? https://firecore.com/infuse https://firecore.com/infuse
- pocketarc 3y agoThat looks -very- nice. What's your experience been with it, do you use Plex or anything like that? What do you mean 'can't go back to transcoding'? What have you been using that doesn't transcode?
- voltaireodactyl 3y agoInfuse offloads transcoding to the client device, so you can use a low powered NAS with an appleTV for example.
- jwells89 3y agoIt can also direct play a lot of formats too though, because Apple TV boxes since the 2017 4K model have enough muscle for problem free software decoding.
- mvanbaak 3y agoand this is both nice and horrible. 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.
- simongr3dal 3y agoI’m using Infuse as well, and it’s pretty amazing. The main thing that Infuse does differently from all the others is that it always does Direct Play (in Plex parlance) so you don’t need anything powerful or power hungry to be hosting the video. Most devices that will play video these days are powerful enough to do the decoding themselves and have the bandwidth available.
- neodymiumphish 3y agoI’d be interested to know the status for the player apps on various platforms. For example, this is a nonstarter for me until it supports Google TV and iOS/iPasOS.
- candiddevmike 3y agoThis is unfortunately a deal breaker for most home grown media browsers. They need to maintain apps on all the walled gardens their users are using, which is a ton of work IME.
- jwells89 3y agoCouldn’t this be addressed by standardizing around a protocol? That way client and server are decoupled and existing clients can work with new media server projects.
- djbusby 3y agoLike if my TV could just open the webpage of my in-home media server and let me browse and play.
- jwells89 3y agoWell maybe, but smart TV and streaming box browsers are unlikely to implement all the functionality pertinent to a high-grade home theater experience. Apps are better here, so what I had in mind was closer to standardization around existing popular protocols like that currently used by Kodi and Plex, both of which have high quality clients for just about every platform out there.
- petepete 3y agoIs that not what DLNA is?
- jwells89 3y agoKind of, but as I understand it’s pretty barebones and can’t support an experience like that provided by Plex.
- debacle 3y agoI tried switching from Plex to Jellyfin, and one of the greatest limitations that I noticed with Jellyfin is that it doesn't seem to really give a shit about managing libraries, and seems overly opinionated about file structure. There's whole sections of the wiki dedicated to naming your files right that I don't have to deal with with Plex. 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.
- buggeryorkshire 3y agoHad exactly the same issue. Jellyfish was very opinionated, Plex doesn't care.
- slily 3y agoBoth Plex and Jellyfin refused to import my fairly standard and accurately tagged music library last time I tried, and Plex is definitely opinionated about structure in video libraries.
- petepete 3y agoJellyfin wasn't happy with my music library either until I realised wanted the ReleaseGroup field to be set. I set Picard to work and an hour later it imported perfectly.
- Modified3019 3y agoThat jellyfin is that nitpicky with a prerequisite just to get a music library to work is horrifying.
- Jochim 3y agoJellyfin has handled the default Picard output format just fine for me. 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
- user- 3y agoThe readme was obviously written with a LLM and it makes it so hard to read. High word count isnt a good thing
- tdhz77 3y agoI didn't catch this until you called it out. While I reading I was anticipating an argument that would convince me that I need Kyoo. I'm not convinced that its setup once and forget it -- especially since it also says that its not afraid of adding more services (complexity). Further, the hard stance on cinema only instead of books, games, etc made me think that the project was rigid. Making me potentially add more services to manage all of my entertainment media.
- hoherd 3y agoI was also surprised by that bit about adding more services: > 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..
- zoriya 3y agoAs a user, you don't really need to care about the number of containers since everything is managed by docker-compose or k8s (soon). The advantages of having more containers is that you can have specialized softwares. For example, the search system is based on meilisearch which makes it way better than what could have been done by just using postgres/sqlite. It also makes distribution or replication built-in (for example, to have a transcoder on a remote computer), jellyfin/plex does not support this natively and users have written their own remote transcoder for that.
- freedomben 3y ago
- jwells89 3y agoLooks nice. One thing I’ve noticed is that media server projects seem to have a disposition towards C# specifically, which I find interesting. Is there a technical reason for this or is more of a big project setting norms situation?
- kyriakos 3y agoMost related software too (the *arr family) are written in .net. It's a decent platform offers good performance without sacrificing developer experience.
- HumblyTossed 3y agoThis one looks like it's written in several different languages. I see some C#, Go, Python. Maybe there's some front end stuff too, but I'm allergic to that.
- zoriya 3y agoc# shines for webserver stuff so it's no wonders, I like it less and less tho Kyoo also uses python/golang for some of it's components (and typescript for the frontend)
- CBarkleyU 3y ago> I like it less and less Would you mind eloborating?
- zoriya 3y agoI don't like the closed environment where you are not a first-class citizen if you are not using vs or rider. I always work on vim and linux, and I am getting tired of fighting with whatever new stuff microsoft makes that does not work out of the box (their latest LSP that does not follow the spec they created themselves as my latest example).
- Rohansi 3y agoIt's not at all a closed environment though? You can live entirely on the command line if you wanted to and that's a fully supported workflow.
- exe34 3y agoCould I install this on a raspberry pi and plug a TV to it over hdmi? I.e client and server on the same pi.
- zoriya 3y agoYou technically can, but that's not really the goal of kyoo, you would not need most features.
- mdaniel 3y agoHaving both postgres and rabbitmq strikes me as overkill - I wonder if they'd be open to a PR to harmonize to just PG, slimming down the ops burden. I'll have to dig into it when I'm back on my desktop to see what exactly RMQ is doing for a media server
- deleted 3y ago[deleted]
- zoriya 3y agorabbitmq is used to communicate between services. I just introduced it but it will be used to: - handle websockets communication with the client - create workqueues for new items creation/rescan requests - Watch list syncing with external services - and to synchronize different replicas when deployed on k8s (still need work on this point tho)
- JeremyNT 3y agoI'm not here to talk you out of rabbitmq now that you've already added it for this project, but IMO it's worth taking a look at PG notify/listen and keeping it in mind for simple use cases. It's not nearly as powerful but it can be a pretty good starting point before pulling in more dependencies.
- cchance 3y agoAre you running your own websocket server or just spinning up soketi in a container?
- zoriya 3y agoFor now, I'm not doing anything, websocket is next-release big change. I did not know about soketi tho, i'll take a look.
- eyegor 3y agoIf you're in dotnet land, I'd recommend looking at magic onion [0] or memorypack [1]. It'll be much nicer to work with once you have a decent pile of message types. Otherwise it's easy to end up in an entity framework like situation where you're constantly serializing and deserializing, generating serializer wrappers, doubling up on dtos and schemas, etc. Although any of the cysharp libs are great in dotnet, definitely recommend checking out their back catalogue. [0] https://github.com/Cysharp/MagicOnion https://github.com/Cysharp/MagicOnion [1] https://github.com/Cysharp/MemoryPack https://github.com/Cysharp/MemoryPack
- SamuelAdams 3y agoWhat sort of audio formats does this direct play? My biggest complaint with JellyFin is that it can’t play Dolby DDD+.
- zoriya 3y agoIt can direct play whatever your client supports, for now only android and web are supported clients. Web browsers aren't great with media compatibility tho, I think you will face the same limitations as with Jellyfin.
- n3storm 3y agoWhy some many self-hosted mediabrowsers written on C#/Mono? (honest question)
- giancarlostoro 3y agoBecause it's a great programming language, not sure about Mono, but .NET 8+ is now cross-platform (has been since sometime in 2016 actually), so I personally am choosing C# for some of my projects lately as a result. 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.
- Jochim 3y agoJust my own conjecture, but it's pleasant to write, the NuGet package ecosystem is very well populated, and it combines a great web framework with the ability to drop down into low level code when necessary. In recent years cross platform support has gotten fairly good as well
- n3storm 3y agobut there aren't as many IDEs, NAS/homelab manager, backup, games, graphic editing or visualization tools, ... Is it something about codecs availability?
- imran-iq 3y agoI think (and I could be misremembering here) is that Emby started off as C# and both Plex and Jellyfin are forks of it. Also a lot of folks in this sphere seem to be on windows as their primary platform, and C# along with visual studio is pretty on that stack
- 3y ago
- ALittleLight 3y agoLooks good. I went to the demo page and clicked on a few movies and scrubbed through at random. Everything worked flawlessly. 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?
- zoriya 3y agoThanks a lot. The demo is the docker-compose from the README on an oracle's VPS always free tier. I never tried to benchmark the server, but the limiting factor will certainly be the encode speed of the machine. If your clients all needs transcoding of different h265 8K movies at the same time, you would need vastly different GPU/CPU power than for the same amount of users with direct play.
- ALittleLight 3y agoI'm impressed you can host it on the Oracle free tier. Great project, thanks.
- peterldowns 3y agoLooks very pretty and the demo is nice. Congratulations on the launch. I'm a happy Plex user, via Plexamp for audio and the Plex app for Apple TV for video, and I'm not interested in switching. That said, > 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.
- ecliptik 3y agoPlexamp is the one thing that keeps me on Plex. 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.
- iamacyborg 3y agoIf you don’t mind paying a subscription, I find Roon hugely superior to PlexAmp.
- manmal 3y agoIn case you‘re into audiobooks, I suggest to check out Bookcamp too. I guess Plexamp works for that as well, but Bookcamp is just like Audible in a way.
- drakenot 3y agoBookcamp has fairly negative reviews on the App Store. Have you had issues with it?
- generalizations 3y agoI've noticed that in general, a lot of selfhosted-adjacent apps tend to get negative reviews. Without having looked at bookcamp specifically, I've noticed that a lot of times, it's because those apps require a minimum level of competence from their users, and those users that miss the threshold generally leave negative reviews.
- tombert 3y agoThis looks great, but it makes me very sad and annoyed through no fault of its own. 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.
- RajT88 3y ago> 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)
- therealfiona 3y agoThat sucks dude, I'm sorry. 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.
- Daunk 3y agoMy issue, going from Plex to anything else, is that it would render things like my AppleTV useless.
- traviswt 3y agoI've had mostly a positive experience with Jellyfin on AppleTV. Have you tried it? Curious what's considered a dealbreaker for you.
- _23sd 3y agoJellyfin is compatible with the Infuse media player on Apple TV. I don't have one but have used it on other Apple things and love it, it's actually a bigger issue with Windows because I haven't found anything nearly as good on Windows as Infuse is on Mac.
- hamandcheese 3y ago+1 for Infuse! But it only direct streams, so it's not the best if you want to stream over WAN.
- kayson 3y agoJellyfin has a decent roku app
- Kerbonut 3y agoJellyfin has an Apple TV app called Swiftfin. It works decently well.
- aloer 3y agoJust the other day I was setting up Jellyfin and tailscale on an n100. 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
- napkin 3y agoI had this problem too! Jellyfin behind a reverse proxy over Wireguard. For intercontinental visitors (high latency), there would be an initial burst of reasonable transfer speed, but within seconds, slow to an unusable crawl. It took a long time to identify the problem as relating to packet congestion. 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 https://news.ycombinator.com/item?id=37408406
- cchance 3y agoMy issue ended up being the auto-bandwidth negotiation being sorta shitty in jellyfin, i set my remote over headscale web browser to 10mbit and the tv shows play very quick though could maybe be a bit faster.
- overbytecode 3y agoCurious, what was your process debugging/diagnosing this? How did you reach the conclusion that it was packet congestion?
- napkin 3y agoWish I could say it was more sophisticated than slow trial and error. I tried changing many different aspects: MTU, forcing different routes/peering through different VPSs, various reverse proxy configurations. 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.
- doublerabbit 3y agoMeanwhile I just host locally a Minidlna. 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.
- Pasorrijer 3y agoAny chance you'd add ebook support?
- zoriya 3y agoNo, I want to stay focused on movies/series/anime. There's already a lot to handle for me alone working on this, and ebook/music is just different enough that supporting it will need a good amount of efforts.
- xyst 3y agoWhat’s the expected ideal experience? 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”?
- Pasorrijer 3y agoIdeally I'd like the same experience I have for Plex et al for my library on supported mobile devices. Go to app, select book, download to device. Same as I would do with a tv show or movie.
- komali2 3y agoCalibreweb not working well for you?
- xyst 3y ago[flagged]
- zoriya 3y agoClassic rust fan :p I tried to write the transcoder in rust before rewriting it in rust. You can call that skill issue, but I did not like the language and needed a rewrite because I was taking a fundamentally broken approach anyway.
- jzb 3y agoPity that they don’t handle music. That’s my primary use of Plex: managing a music library. I feel like that’s a secondary focus for Plex, too, but it’s good enough.
- lyu07282 3y agoInteresting project, the only question i have is about this: > 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?
- zoriya 3y agoI run ffmpeg on small segments of video and when you seek too far from the current transcoded position, i create another ffmpeg process. The hard part is making sure those segments can be watched without gaps or issues and no audio/video segment is repeated. If there is enough interest about it I might make a blog post explaining this in details
- hruzgar 3y agoI'm using the time skip/seek functions more than I should and Plex, Jellyfin, Emby are really not good in that department. I was WAITING for somebody to fix this problem. Plex, Jellyfin, etc. None of them came close to the youtube experience. It always felt very slow and clunky. I can't thank you enough for this really. Thank you very much for addressing this issue and creating this amazing project!
- zoriya 3y agoThanks for the nice words, I must say I was not expecting that many people to like kyoo. That's really heartwarming <3
- kayson 3y agoGreat to see more competition in this space. I found it interesting that every component seems to be written in a different language. The only one that surprised me a bit was the backend in c# instead of go or node/deno. A bit odd for the scanner to be in python too...
- deleted 3y ago[deleted]
- BeetleB 3y agoNice, but ... will it ever have OTA/DVR support? Plex does it better than any other service (unless you pay large $$$).
- CodinM 3y agoThis looks really cool, congrats and thank you! Is there a plan for an iOS application somewhere in the future?
- zoriya 3y agoprobably not in a close future since it requires paying $100 a year per app to publish to the app store. i also dont have any apple device so i cant even test it. i dont know how hard/easy it would be to port the app in itself tho, its written in react native so it should be pretty straightforward but you never know. would love to be available on ios tho x(
- hruzgar 3y agovau. after having used plex, jellyfin and emby, the video player seems very responsive and good designed. Time skipping is almost instant and the interface seems fairly clean. Thanks for the great work!
- maxglute 3y agoI'm glad more options are cropping up with the direction plex is heading. I'd like to see someone build a hook/connect straight into SONARR/RADARR where you can just click on a calendar entry and jump to a player. They're probably weary of doing it themselves due to legality. But combining self hosted media with... pirate management into one interface would be convenient.
- onedr0p 3y agoYou might be interested in https://github.com/midarrlabs/midarr-server https://github.com/midarrlabs/midarr-server, that has integrations into Sonarr/Radarr.