Jump to content

Recommended Posts

Jdiesel
Posted (edited)

 Hi everyone,                                                                                                                                                                                                                    

I've been slowly learning and building something I'm excited to finally share with this community. It's called Embrr, a from-scratch Android TV client for Emby, written in Kotlin with Jetpack Compose for TV, Hilt, Retrofit, Coil, and Media3 ExoPlayer.                                                                                                                                                                                                                                                                          
This post is a sneak peek only. Embrr is still in active development, but I'm planning a limited beta test in the near future for Emby forum members who want to kick the tires and give feedback. I'll share signup details in a follow-up once the build is  stable enough for outside testers. For now, I want to show what's coming and what makes Embrr different.    

                                                              screenshot.thumb.png.a5250641fc81d9d0ade5195c4aed6af2.png                                                                                                                                   
What sets Embrr apart from the official Emby app:                                                                                                                                                                                                                                                              
                                                                                                                                                                                                                                                                                                                                                  

Smart bandwidth monitoring & connection-quality health checks                                                                                                                                                                                                                 

Embrr watches your network conditions in real time and adapts. A connection-quality health check runs during playback so transcode decisions, bitrate caps, and direct-play fallbacks are made against your actual current throughput, not a static setting you configured once and forgot. Bad Wi-Fi? Embrr notices and degrades gracefully instead of stalling into an endless buffer. Embrr doesn't just trust the "max streaming bitrate" number you set once in a menu and hope for the best.                                                                                                                                                                                                                                                                        
Here's how it works. In the background, Embrr requests a representative chunk of real media bytes from your Emby server over the same HTTP path a transcode or direct-stream would use — same TLS, same reverse proxy, same CDN hop, same server-side decode  overhead. That's the critical difference from a generic bandwidth test: it measures the end-to-end path your video actually travels, including any buffering, contention, or transcoding latency the server introduces under load. A plain ping or throughput test to a fast CDN won't tell you that your Emby box is choking on a transcode at 9 PM when the whole house is streaming.                                

                                                                                                                                                    
From those probes Embrr computes a sustained-throughput figure with headroom built in, it doesn't recommend right at the measured ceiling, because real-world bandwidth varies second to second and a recommendation that stalls into buffering is worse than one that plays cleanly at a lower bitrate. The result is an accurate, current bitrate recommendation tuned to your setup right now: a wired gigabit link to a local server will get a very different recommendation than Wi-Fi across the house to a remote Emby instance through a tunnel.                                                                                                                                                                                                                                                                                    

That recommendation then feeds directly into the playback decision engine, direct-play vs. transcode, and which transcode bitrate cap to request  so the choice is made against live conditions rather than a stale config value. If conditions degrade mid-session, Embrr notices and can renegotiate down instead of endless buffering. If you'd rather force a fixed cap, that's still available in settings; the adaptive mode is opt-in but on by default.                                                                                                                                                                        
screenshot11.thumb.png.21ac0977c422f6f2e7db94ddb7204834.png                                                                                                                                                                                                                                                                                                                   
     

"What to Watch" wizard + natural-language search, powered by an LLM                                                                                                                                                                                                                                           
Can't decide what to watch? Embrr's guided wizard walks you through a handful of branch-aware questions (format commitment, mood, intensity, dealbreakers, language preferences, etc.) and returns six ranked picks, each with a human-readable explanation of why it matched you, plus vibe tags. The questions adapt based on your prior answers, so you never get conflicting or redundant prompts.                                                                                                                                  
                                                                                                                                                                                                                                                                                                                   
Prefer to just describe what you're in the mood for? The natural-language search takes a free-text query ("something atmospheric and slow-burn, foreign language, under two hours") and returns the same kind of ranked, explained results. Both paths are powered by an LLM via a companion Emby server plugin (Embrr-Helper) so the heavy lifting happens server-side.                                               screenshot9.thumb.png.17f38e074a72b5c196d44380bc939021.png                                                                                                                                                  
                                                                                                                                                                                                                                                                                                                   
 

Library view with hero sections                                                                                                                                                                                                                                                                               

Library browsing isn't a flat grid. Embrr uses a dynamic, per-user home screen driven by your Emby home-section configuration, with hero backdrops, resume rows, next-up, latest media, and per-library rows. Library views lead with a hero section so the first thing you see is a cinematic backdrop of a featured item, not just a wall of posters. It's all designed on finding something to watch with the fewest clicks possible.

screenshot2.thumb.png.6d5e1305945a6ae52752fe7ccf7123ca.png

 

Last.fm top tracks & popularity metadata                                                                                                                                                                                                                                                         For music libraries, Embrr enriches albums and artists with Last.fm top-track rankings and popularity signals. Instead of just listing tracks in album order, you get a sense of what's actually popular with other listeners. It makes music browsing feel curated rather than just a file listing.                                                                                                                                                                                                                       screenshot4.thumb.png.c56670bfe6fbde686e368475226d48c4.png                                                                                                                                                                                                                                                  

Music mini-player                                                                                                                                                                                                                                                                                             
When you play music, Embrr keeps it in a mini-player that persists while you browse. Track info, and controls docked and visible without taking over the screen. You can keep exploring your library while your music keeps playing                                                                                                                                                                                                screenshot8.thumb.png.593471e0a70670e6367917f979d98b9e.png                                                                           
                                                                                                                                                                                                                                                                                                                                                                                                                                                                          

What's next                                                                                                                                                                                                                                                                                                   
                                                                                                                                                                                                                                                                                                                   
A limited beta is coming soon. If you'd like to be considered, keep an eye on this thread. I'll post beta signup instructions once the build is ready for outside testers. Feedback from this community will directly shape what ships first.                                                                
                                                                                                                                                                                                                                                                                                                 

Happy to answer questions about architecture, the Embrr-Helper plugin, or anything else. Thanks for reading, and thanks to the Emby team for building such a great server to build a client against.                  

screenshot3.png

screenshot5.png

screenshot6.png

screenshot7.png

screenshot10.png

screenshot12.png

Edited by Jdiesel
  • Like 2
IAmHugh
Posted (edited)
50 minutes ago, Jdiesel said:

Smart bandwidth monitoring & connection-quality health checks 

I like that with a recent issue I ran into with buffering issues in Emby.

 

50 minutes ago, Jdiesel said:

powered by an LLM  

Now that's a no go.

 

Need to ask even though the Emby devs will probably have strokes, are you including a per library search and perhaps a proper search for settings? Thanks

Edited by IAmHugh
Jdiesel
Posted
1 minute ago, IAmHugh said:

I like that with a recent issue I ran into.

 

Now that's a no go.

Completely optional. If you don't configure it, it's not available. 

IAmHugh
Posted

Please reread my previous post. I edited it for clarity.

Jdiesel
Posted (edited)

I'm not sure I fully understand the question but the app uses a local search by calling GET emby/Users/{userId}/Items with some some specific filters enabled to limit the types of results. This is the Emby way of searching and will return the same results as the official apps.

The LLM enabled search is completely separate and lives under its own Discovery tab. If you don't have the Embrr-Helper plugin installed on the server and the Discovery feature enabled in the plugin, the Discovery tab will not be visible in the app.

Think of the plugin as a librarian who has read every movie and series in your Emby library and can understand what you mean — not just match keywords.

1. Building the index (one-time setup, runs in background)
The plugin walks through your library's Movies and Series, and for each one it gathers a "summary card" — the title, overview, genres, tags, studios, cast, year, rating, runtime, etc. This is done locally by DiscoveryMetadataExtractor.
Then it sends those text summaries to the external LLM/embedding service. The embedding service turns each summary into a list of numbers called an embedding, basically a "meaning fingerprint" of the item. These fingerprints are stored in a local SQLite database that lives alongside the plugin.

2. Searching (when you ask for something)
When you type something like "a smart sci-fi movie that isn't too long":
1. The plugin sends your sentence to a LLM and gets back an embedding for your query, the same kind of "meaning fingerprint."
2. Locally, it compares your query's fingerprint against every stored item fingerprint using cosine similarity. No external call is needed for this part, it's all done locally and fast.
3. The top candidates are pulled back from Emby as real items, and the plugin checks each one against your account's permissions and parental controls so you only see things you're actually allowed to see. Played/unplayed filters are applied here too.
4. Optionally, the LLM is asked once more to rank and explain the top candidates — producing human-readable "reasons" like "Thoughtful science fiction, moderate runtime". If the LLM is unavailable, it falls back to pure similarity scores.

3. Guided Wizard (the question flow)
Instead of typing a sentence, the wizard asks you up to 5 multiple-choice questions (mood, runtime, genre, etc.). Each answer narrows the candidate pool locally using local tag-filtering logic, and after the last answer (or when you tap "Finish"), it returns the same kind of ranked, hydrated results.

Edited by Jdiesel
Jdiesel
Posted
54 minutes ago, IAmHugh said:

perhaps a proper search for settings? Thanks

Do you mean a search bar in the settings menu to find a specific setting? It isn't currently implemented but I do like the idea. I use that feature frequently on my Android phone to find obscure settings.

Posted (edited)

So it's going to send info out of one's system. Or is that something that can be completely disabled / not enabled?

Edited by IAmHugh
Jdiesel
Posted
Just now, IAmHugh said:

So it's goi ng to send info out of one's system. Or is that something that can be completely disabled / not enabled?

No info on your system or library is sent out if you don't enable the feature. You can also choose to run your own models locally. It was developed with Gemini and it's free tiers in mind though.

Posted
Just now, Jdiesel said:

Do you mean a search bar in the settings menu to find a specific setting? It isn't currently implemented but I do like the idea. I use that feature frequently on my Android phone to find obscure settings.

Emby has yet to fix a major issue that they have had since at least 2018 and that is when you search for something it search all one's libraries not just the library you're in. If I'm searching for something in TV series I only want results from within that library. On top of this if you're in settings and search you only get results from your libraries not from settings.

Posted
1 minute ago, Jdiesel said:

It was developed with Gemini and it's free tiers in mind though.

I actually have Gemini disable on my phone.

Jdiesel
Posted

I appreciate that AI isn't for everyone. I choose to implement as an optional feature to improve search and discoverability. I hope others will find it useful too.

Posted

So the AI functions are completely optional?

Jdiesel
Posted
1 minute ago, IAmHugh said:

So the AI functions are completely optional?

Correct

  • Agree 1

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...