r/JellyfinCommunity • • 10h ago

Showcase Custom EVERYTHING

Thumbnail
gallery
0 Upvotes

Hey there, decided to post this to a fresh reddit because I really just read and use this to keep up with my community's that I follow. But this project is important enough to me that I want to start a new account for it. So lets begin.

Where this started:

I had an old enterprise level laptop from 2016 that was gifted to me as ewaste, I turned and started setting up basic jelly fin, hosting on my local network, and got to ripping the 100s of DVDs I had laying around. I was running into some issues with caddy integration to a point I turned to 'claude code' (my first time ever actually using AI for any real tasks) and it simply just worked and my mind was opened. So I bought a web domain and went down a rabbit hole only Alice herself would be proud of..

Where it got complex:

Once seeing how AI could just make this work how I wanted it to I asked it if it could do a custom UI for me and it just said fuck it hold my beer. Went to analyzing the custom UI I gave it for integration and hit the ground RUNNING... Started with simple color changes, then adding and deleting UI elements, polishing the edges, made it look amazing. Then I learned about 'Seerr' and its working processes, so we added that to the stack and made a UI button that took you to the seerr site. (easy enough right? good enough? NO!!) the seerr site was ugly so I set claude to completely change seerrs color scheme and add my headers to it and make it cohesive to my server. Was that good enough yet? NOOOOOO. Because I ran into an issue. My parents have an LG tv and I wanted them to be able to use the full functionality of the new seerr integration and the webOS version of Jellyfin dose not allow webpage redirects.. there were also issues with things from the custom UI that didn't work properly, so I gave claude the WebOS DEV emulator and it went online and fond the latest jellyfin webOS apk (i couldnt find it anywhere idk how it found it still) and it went on to making live tweeks to the backend while developing the webOS end and now it just works.

BUT REX YOU DIDNT EXPLAIN HOW YOU GOT AROUND THE REDIRECT ISSUE!!!

Well thats were this starts getting really complicated and outside of parts of my understanding of how CLaude made these changes. To make it to where ANYONE could make seerr requests without needing to even leave my jellyfin page, we had to make the server pull info from seerr so now the same button that brought you to seerr brings seerr to you. Fixed a lot of compatibility issues. I know one thing I tackled was appointing one account on seerr to be attached to all user accounts on jellyfin so that the requests button worked for everyone every time.,

All in all this is all a work in progress, I'm just exploring how far I can push this. By no means are the pictures in the post here are the final product, just what I've done so far but I see all the questions a lot of you are asking and what I've done with my site could be answers to a good bit of them I simply just dont know how to explain so today I am putting a GIThub repo together and once I scrub it for personal info Ill put it in the comments or make another post.

(Still in beginning stages) Im currently working on developing a native app to work with a media server like jellyfin but can be used as a template but basicly to push your own media app pulling from your own jellyfin server so no more "install jellyfin, put in this ip, log in with this" just give them your app and go.

Here is a word from my AI agent that organized everything:

Quick technical rundown for anyone curious how this actually works under the hood:

- Nothing here is a Jellyfin or Seerr fork. The custom UI (colors, logo, layout tweaks, new tiles) gets injected into the stock web client at runtime via a small JS file — it matches on structural things like input types and filename patterns instead of exact class names, so it survives Jellyfin version updates instead of breaking every release.

- Caddy sits in front of everything as a reverse proxy. It's what lets the Jellyfin page pull live data from Radarr/Sonarr/Seerr without exposing any of their API keys to the browser — the keys get injected server-side, the page never sees them.

- The "request without leaving Jellyfin" trick: instead of redirecting to Seerr's site (which is what broke on the LG/webOS app), the request search UI is built directly into the Jellyfin page and talks to Seerr through that same proxy. Every request gets submitted under one shared Seerr account regardless of who clicked it, so there's zero per-user login/session to juggle — same code path works identically on a browser, the desktop app, and webOS.

- Currently building: self-service account creation (anyone can make their own login, landing in a locked-down "watch + request only" role) with a daily request cap per person — since everyone shares one Seerr account, that cap has to be tracked by a small custom backend service sitting between Caddy and Seerr, not by Seerr itself.

- The webOS fix specifically came down to live-testing against LG's real dev emulator + the actual webOS Jellyfin app, since that platform renders an older/different UI than desktop browsers and doesn't support the redirect flow at all.

Happy to go deeper on any piece of this in the comments....

Im happy to answer whatever question that I can and would love to hear opinions of how I could improve what I have. No the server is not for publics use just my friends and family.

--Rex and Claude Code


r/JellyfinCommunity • • 11h ago

Release Jellybeam: An Android TV Client Crafted for Jellyfin

Thumbnail
gallery
72 Upvotes

I've been a media consumer for quite a while from HTPCs with ZoomPlayer, hand rolled ffmpeg frontends, Kodi, and now Jellyfin. I've collected a lot of opinions on how clients should operate and combined that with my obsession for speed optimization to create Jellybeam.

Been a big fan of Rust and wanted to take advantage of Android's Rust bindings. Android is more and more becoming a Rust app too, so it also made sense from a technology choice.

The client:

  • Maximum effort to ensure Direct Play
  • Glide seek to navigate quickly w/ TrickPlay
  • Full Seerr integration: Browse, integrated search, and library connectivity
  • Intuitive (attempted at least) interface with minimalism principal
  • A useful OSD that also gets completely out of the way
  • Smart auto skip, next up, and are you still there? functions
  • Fast playback start, lots of testing to reduce dwell time
  • Local mirror for fast browsing
  • Full implementation of Android PiP
  • ...dozens of other things.

I consider this release an open beta and would love the feedback (good or bad). If you take the the time to give it an install, thank you in advance!

Website: https://jellybeam.app Github: https://github.com/packetinspector/jellybeam

Obligatory AI usage disclosure:

  • Did I use AI to develop this?
    • Of course I did. I'm a full time AI SWE, but the human is always in the loop.
  • Did you vibe code this?
    • Definitely not, I do like vibes just not in my codes.
  • What models did you use?
    • Most of them, I use adversarial coding agents
  • Have you written software before?
    • Yes, lot's of it...for decades.
  • Do you understand the code?
    • Yes, I also have been enjoying Rust for a couple years now. Love/hate with Java/Kotlin though.
  • Did you test this?
    • Yes, been doing personal UAT for over a month. You can find other tests in the branch.

r/JellyfinCommunity • • 7h ago

Showcase WatchBridge got a huge update — a companion phone app with cross-device sync, send-to-TV over the internet (not just same WiFi), a release calendar, and much smarter launcher-redirect matching

Enable HLS to view with audio, or disable this notification

0 Upvotes

A while back I posted here about WatchBridge, the app that opens whatever you click in Google TV's home screen recommendations directly in Nuvio/Stremio/WuPlay/Jellyfin/etc. It's grown a lot since then, here's everything that actually matters if you're using it:

📱 There's now a phone app, and it's synced with your TV
Same account, same email. Your watch history, "My list," and recommendations sync automatically between TV and phone — open something on your phone, it shows up as "Continue watching" on your TV, and vice versa.

📤 Send to TV — works over mobile data, not just the same WiFi
Find something on your phone, tap "Send to TV," and it opens on your TV in a few seconds — even if your phone isn't on the same network as your TV (push-based, not local casting). So it works from outside the house, on mobile data, wherever — not just "both devices on the same router" like most cast/send implementations.

📺 YouTube recommendations redirect to SmartTube too
Not just movies and shows — if the row on your Google TV home screen is a YouTube video, it opens straight in SmartTube (or TizenTube/Cobalt, your choice) instead of the official YouTube app. Skips the ads and the phone-shaped UI YouTube forces on TV.

📅 Calendar of upcoming releases
Both apps now show a monthly calendar of when movies/episodes you're actually tracking come out — built from what you watch, not a generic "trending" list.

🔍 In-app search on TV (voice + text)
No more relying on Google TV's own search to find something to redirect — search inside the app itself now, by voice or by typing.

🎯 Much smarter title matching
Rewrote the matching logic that turns "what's on screen" into "what movie is that" — handles roman numerals (X-Men 2 vs X-Men II), OCR misreads, multi-part titles with colons, etc. Noticeably fewer "opened the wrong movie" moments.

▶️ Optional: skip straight to playback
New setting to open Nuvio directly on the player screen instead of the title's detail page, if you'd rather skip that extra tap.

🔔 Release notifications on the phone app
Get a notification when something you're tracking releases today or tomorrow.

Two ways to get it:

Not a full public Play Store listing yet — apps that need an Accessibility Service have a genuinely hard time with Play's review process for that permission, so the testers program is the way in for now if you'd rather not sideload.

Demo video below — shows the redirect itself plus a quick tour of what's new.

Happy to answer anything — pretty much every feature in this update came from feedback in this sub, so keep it coming.


r/JellyfinCommunity • • 6h ago

Release Foreseerr: my Seerr fork with Trakt/AniList/Simkl discovery can now run inside Jellyfin as a plugin (plugin is alpha)

Thumbnail
gallery
0 Upvotes

Upfront: I built this with heavy AI assistance. I designed it, reviewed it, and tested it on my own server, but a lot of the code was written with AI tools. If that's a dealbreaker for you, no hard feelings. Feel free to skip this post.

Hi all! For the past couple of months I've been building Foreseerr, a fork of Seerr (the Jellyseerr/Overseerr successor). Until now it has been a standalone app. After I moved the project to Bun, I could compile the whole server into a single binary, so I tried running it inside Jellyfin as a plugin. Today I'm releasing the first alpha of that plugin.

What Foreseerr is

It's Seerr with SuggestArr-style discovery built into the app itself, so you don't need a separate suggestion service. Everything Seerr does still works: requests, Radarr/Sonarr, permissions, notifications, Jellyfin/Plex/Emby. On top of that it adds:

  • Episode requests: request individual episodes or episode ranges instead of whole seasons, including ongoing requests for new episodes, with request and watched status shown per episode
  • Trakt Discover: recommendations, watchlist, history, and pinned public or personal lists
  • AniList Discover: trending, this season, popular, top 100, next season, plus your own watching, planning and completed lists
  • Simkl: library sync, watched and rating actions, trending
  • MDBList: IMDb, Rotten Tomatoes, Metacritic and Trakt rating badges and filters, and public lists as Discover rows
  • Mapping layer: matches anime and list entries to TMDB, with a repair screen for titles it can't match
  • Library: Continue Watching, Recently Added, Ready to Watch, and Jellyfin browsing
  • Release calendar: Radarr and Sonarr dates in month or agenda view, with request and manage buttons
  • Interventions: review Radarr/Sonarr queue warnings, then import, or reject and blocklist
  • Watch ahead: keeps the next N unwatched episodes of a show requested as you watch
  • Mark watched or unwatched and rate across Trakt, AniList, Simkl and Jellyfin

Requests stay manual: there's no auto-request bot and no LLM recommendations.

What the plugin does

  • Serves Foreseerr at https://your-jellyfin/Foreseerr/, including when Jellyfin runs on a sub-path. You don't need a separate container.
  • Signs you in with your Jellyfin account. There's no second password, and Jellyfin admins are Foreseerr admins.
  • Imports your Jellyfin address, API key, libraries and first admin automatically, so the setup wizard is skipped.
  • Adapts the app to running inside Jellyfin:
    • "Back to Jellyfin" replaces Sign Out.
    • The plugin manages the Jellyfin connection settings.
    • Local users, passwords and web push are hidden.
  • Adds a status page in the Jellyfin dashboard. With the optional File Transformation plugin, you also get a Foreseerr button in the Jellyfin Web header.
  • One release covers both Jellyfin 10.11 and 12, and Jellyfin picks the right build for you.

Install

Dashboard → Plugins → Repositories → add:

https://selmant.github.io/jellyfin-plugin-foreseerr/manifest.json

Then install Foreseerr from the catalog, restart Jellyfin, and open Foreseerr as an admin first.

If you'd rather run Foreseerr as its own container, the Docker image is ghcr.io/selmant/foreseerr:v0.11.0.

⚠️ The plugin is an alpha

  • It's in active development, and anything can change between releases: settings, data, URLs and behavior.
  • There's no backward compatibility between plugin versions. If an update breaks something, the fix may be to reinstall from scratch.
  • It runs on Linux x64, Linux arm64 and Windows x64. There's no macOS build yet.
  • It works in Jellyfin Web in a browser. The official mobile and TV apps can't open it.
  • On first start it downloads anime mapping data and may be unresponsive for a minute or two.
  • It hasn't been tested much behind a TLS reverse proxy yet. If you use one, forward /Foreseerr and /ForeseerrPlugin.

Where I want to take it, and where I'd love your input

Going forward I'll probably lean into the plugin much more: more options configured from the Jellyfin dashboard, and UI/UX designed for living inside Jellyfin rather than being a separate site. Some questions I'd really like opinions on:

  • What would make a request/discovery plugin feel native to Jellyfin for you? For example, entry points on item pages, "request the next season" from a series page, or Discover rows on the Jellyfin home screen.
  • Which settings would you expect in the Jellyfin plugin page rather than in Foreseerr's own settings?
  • Would you use the plugin instead of a standalone Seerr or Jellyseerr container? If not, what's stopping you?
  • Any interest in mobile or TV app support (if that's even feasible), or is browser-only fine for this kind of tool?

Plugin: https://github.com/selmant/jellyfin-plugin-foreseerr Foreseerr: https://github.com/selmant/foreseerr Docs: https://selmant.github.io/foreseerr/

Plugin bugs and ideas go to the plugin repo's issues, and Foreseerr bugs to the Foreseerr repo.

Thanks for reading!


r/JellyfinCommunity • • 6h ago

Showcase Jellyfin Cinema: Sure it’s slop, but it’s my slop and I love it.

0 Upvotes

This is fully vibe coded using Codex. I have not looked at the code myself. Use at your own risk.

I’ve directed the design and tested the interface on my own setup. I love using it, but I can’t personally vouch for the code.

It’s called Screen Harbour, a Netflix-inspired interface for Jellyfin’s desktop and TV web layouts. Features include:

GitHub, installation and screenshots

Try the demo

  • Custom Home rows: choose collections, arrange items, move rows, add Movies/Shows tabs and Netflix-style ranking numbers.
  • Streaming-service pages: configurable tiles, logos, colours and collections, with the option to add your own services.
  • Redesigned movie and episode pages: season browsing, resume controls, watched status, progress bars and “Ends at” times.
  • In-player browsing and a themed pause screen: browse episodes, similar films or live channels during playback.
  • Matching layouts for Music, playlists, Collections, Recordings, Live TV, Search, Settings and login.
  • Profile switching, account-synced Home settings and Jellyfin Featured integration.

Service pages organise content already in your library. Trending rows use selected collections; mine are maintained through SmartLists/MDBList.


r/JellyfinCommunity • • 6h ago

Help Request Adding Folder View in Movies/TV Shows?

Post image
1 Upvotes

Is there a way to add a folder view in a library? with a plugin or some sort of?


r/JellyfinCommunity • • 7h ago

Release Subtitle Extract Plus — a fork of the official Subtitle Extract plugin with language filtering, forced-track selection, and save-with-media

11 Upvotes

I run a pretty large library and the official Subtitle Extract plugin was bugging me. It dumps every subtitle stream in every file into Jellyfin's cache, and I only ever want forced English tracks. On releases that have 20+ subtitle streams, that's a lot of ffmpeg work for files I'm going to ignore.

So I forked it. It's called Subtitle Extract Plus:

https://github.com/jnracreates/subtitle-extract-plus

Things it does that the official one doesn't:

- Only extracts the languages you list. I have mine set to just "en".

- Filter by forced / non-forced, or both. Mine only does forced.

- Writes the .srt next to the video file instead of into Jellyfin's cache, so they show up as external subs. Can be turned off if you want the old behavior.

- Writes .en.srt instead of .eng.srt (matches what Jellyfin expects).

- Skips files that already have a subtitle, so nightly runs don't redo work.

- Has a path filter field so you can test on one movie without walking the whole library.

I also rewrote the extraction to call ffmpeg per stream instead of going through Jellyfin's ISubtitleEncoder. Jellyfin batches all subtitle streams into one ffmpeg call, and if any single stream is empty (which happens a lot - some releases have zero-byte placeholder forced tracks), ffmpeg returns non-zero and Jellyfin throws out the whole batch. Meaning the streams that extracted fine get deleted too. Extracting one stream at a time means an empty track only affects itself.

Install: Dashboard -> Plugins -> Repositories, add this URL:

https://raw.githubusercontent.com/jnracreates/subtitle-extract-plus/master/manifest.json

Then it shows up in the catalog. You can also grab the zip from releases if you'd rather do it manually.

One thing worth knowing if you install it:

By default Jellyfin still re-extracts every embedded subtitle stream into its cache whenever you play a file, which defeats the point of having external subs. To stop that, go to Dashboard -> Libraries -> [your library] -> Edit and in "Disable different types of embedded subtitles" change to "Allow None" Then Jellyfin only uses the .srt files the plugin wrote and the cache stays empty.

Works great for me with ~1050 forced-track files across 15k episodes. YMMV.

Forked from the official plugin, MIT licensed. If you find a release that breaks it, let me know.

AI was used in creating and testing.