kaj 342 Posted Thursday at 12:23 AM Posted Thursday at 12:23 AM TL;DR: I've been building a self-hosted system that adds Plexamp-style sonic analysis to an Emby music library — sonically similar tracks, track radio, "sonic adventures" between two songs, and auto-curated mixes — plus a companion Android app (liquidWave). It's fully self-hosted, nothing leaves your network, and I'm looking for a few testers who run Emby and don't mind a bit of setup. Why I built it I've always loved the Sonic Analysis feature in Plex/Plexamp. The problem is, I don't want to run Plex — I much prefer Emby for all of my other media — and there has never been an Emby solution for doing sonic analysis on the music in an Emby library. It's the one thing that kept pulling me back to Plex, and I didn't want it to. My music collection is old, big, and honestly not very well organised, and I'm lazy about fixing that. What I love about sonic analysis is that it lets me build listenable, automated playlists from a single starting point — a track, a mood, a vibe — without me having to tag and curate everything by hand. That's the whole reason I wanted this. So with the recent rise of AI tooling, it finally felt like the right time to actually attempt it. A note on how it was built I'll be upfront: I built this with heavy use of AI (Claude and Codex). I know a lot of people see "made with AI" and assume junk — but it genuinely isn't that easy. It takes a long time, and you essentially have to become a good project manager: guiding the AI, making the architecture calls, testing on real hardware, and dragging it back on track when it wanders. I've been working hard on this for a while. I built it for myself, from scratch, and deliberately didn't go looking at other apps — I just wanted to build in the features I actually use. One of those is audiobook support, because my wife loves audiobooks and that was important to her — so liquidWave also handles books (with durable resume) alongside music. What it does Sonically similar tracks / artists / albums — based on how the music sounds (neural audio analysis), not genre tags. Track Radio — an endless queue seeded from any track. Sonic Adventure — pick a start track and an end track, and it builds a journey that morphs from one to the other. Auto-curated Mixes — sonically consistent mixes built from your library; refresh any mix, or save it as a real playlist. Stations & Guest DJ — Library / Random Album / Decade radios, plus a Guest DJ that injects sonically matched tracks into your queue. Artist Mix Creator — pick an artist and the grid repopulates with sonically similar artists; keep adding the ones you want, then build a shuffled mix that spans the whole selection. A proper player — Media3/ExoPlayer, queue, shuffle/repeat, crossfade with an artwork cross-dissolve, an in-app equalizer, a Now Playing home-screen widget, Android Auto, and Google Cast to a Chromecast / Android TV / Shield. Offline buffer — the next few tracks in your queue are silently pre-cached in the background, so brief Wi-Fi blips don't interrupt playback. No manual download needed; you'll see "Offline buffer ready" in Now Playing when it's topped up. Audiobooks — browse by book/author, durable resume, speed control. Offline downloads — download any playlist or a whole audiobook (the original source files, no transcode) to your phone and browse + play it with no connection at all — on a plane, underground, wherever. Downloads get their own row on Home (with cover art) and a badge in your Playlists; an online/offline indicator shows the connection state; downloads are Wi-Fi-only by default. Audiobooks keep durable resume even fully offline, and your position syncs back to Emby the moment you reconnect. Managed under Settings → Downloads (Playlists and Audiobooks), with a one-tap "remove download" that leaves the item itself untouched. Themeable — follows your system dark/light theme automatically. Search across music, audiobooks, or everything. You can try it as a plain Emby player first Worth knowing: the sonic backend is optional. The app on its own is a fully working Emby music + audiobook player — you can install it, skip the coordinator entirely, and have a usable player straight away. Browse, full playback (queue, shuffle/repeat, crossfade, EQ, mini player, the Now Playing widget, Cast), audiobook resume + speed, Emby playlists, Recent Plays, offline playlist downloads, search, and the metadata Stations all work with nothing but your Emby server — and a downloaded playlist then plays with no server at all. The sonic features — Mixes, Track Radio, Similar, Sonic Adventure, Guest DJ, and the Artist Mix Creator — are what the backend adds on top. Without it they just stay empty; the app degrades gracefully rather than breaking. So you can get the player running on day one and stand up the analysis side at your leisure. Self-hosted and private — by design This is built privacy-first. It's your music, your server, your network. It's completely non-destructive. Your music and audiobook files are never changed, re-tagged, moved, or deleted — the analysis only ever reads (streams) your audio, and stores its results in its own separate database. The only things it ever writes are the normal playback state any Emby app writes (play counts / resume position), and a playlist only if you explicitly choose to save a mix. Everything runs on your own hardware — there's no account, no cloud service, no analytics, and no telemetry. Nothing about your library or listening is sent to me or anyone else. The audio analysis happens locally. The similarity index lives in a small file on your own machine and never leaves it. The only outbound connection the system makes is a one-time download of the neural model (~327 MB) on first run — after that the analysis stack can run fully air-gapped. It's designed to live inside your LAN (behind your VPN if you want remote access, exactly like you'd treat Emby itself). I'll be clear in the docs about not exposing it to the public internet. It runs on whatever you've got This was honestly one of the hardest parts to get right, so I'm a bit proud of it. The system is split into a tiny coordinator (runs anywhere — Windows, Linux, macOS, or a Docker container on an ARM NAS) and a separate worker that does the heavy analysis on whatever box has spare power. A GPU makes it faster but is not required — CPU works, it just takes longer. Your setup Coordinator Worker NAS (Synology/QNAP/ARM) runs Emby Docker on the NAS Your desktop/gaming PC One Windows box does everything On that box Same box (CPU or GPU) Linux server + a separate GPU rig On the server On the GPU box No GPU anywhere Either Any box, CPU-only — just slower To give you a real-world reference point: my own setup is Emby on an Intel N100 mini PC, music on a Synology NAS, and a gaming PC with an RTX 4070 Super as the worker. My library is around 25,000 tracks and the initial analysis took roughly 7 hours overnight — it would have taken days, maybe a week, running on the N100 alone, which is exactly why I designed it so the heavy work can be handed off to a separate machine. After that it's incremental — new imports are picked up automatically and done in the background. If you're running CPU-only or have a smaller library it'll scale accordingly; the benchmarks in the quickstart give per-track timings for both. You should never have to compile a native dependency — the painful cross-platform bits (PyTorch builds, optional Essentia, the model download) are handled by the defaults and Docker images. The honest state of it It's a private beta, and I want to be straight about that: Android only for now (iOS is a much later maybe). The first library analysis is a one-time slow job — roughly 10–15 s/track on a GPU, 20–30 s CPU-only. A few thousand tracks is an overnight run; after that it's automatic as you add music. A couple of known rough edges I'm still working on (e.g. on-device token encryption). The app is a debug build for now (installs fine by sideloading). It's running on my own gear, use it at home, casting, listening on my motorbike... every day and is genuinely usable — but you'll be early. Interested in testing? Before you put your hand up, have a read of the tester quickstart — it covers exactly what you'll need to stand up (coordinator + plugin + worker + Android app) and how long it takes. It's not a one-click install, but it's not deep either. You're a good fit if you run Emby, can install a plugin and restart your server, and don't mind following a checklist. A GPU helps with the initial library analysis but isn't required. If that looks manageable and you want in, reply to this post or send me a DM with a rough picture of your setup — Emby host OS, whether you have a GPU, and roughly how big your library is. I'll send you the files and repo access directly. I'm keeping this small to start so I can actually act on the feedback. Thanks for reading — this has been a real labour of love. Please try to refrain from criticism that it's built with AI... without AI this wouldn't exist Happy to answer any questions. 2 1
ebr 16456 Posted Friday at 04:27 PM Posted Friday at 04:27 PM On 6/24/2026 at 8:23 PM, kaj said: The app on its own is a fully working Emby music + audiobook player — you can install it, skip the coordinator entirely, and have a usable player straight away Will the opposite work? Can you just have the sonic analysis and then have the standard Emby apps use the results?
kaj 342 Posted Friday at 09:02 PM Author Posted Friday at 09:02 PM 4 hours ago, ebr said: Will the opposite work? Can you just have the sonic analysis and then have the standard Emby apps use the results? Great question. The short answer is — partially. The coordinator's results don't feed back into the standard Emby apps automatically. Those apps only talk to Emby's own API and have no awareness of the coordinator, so the live sonic features (Track Radio, Similar tracks, Sonic Adventure, Guest DJ) need liquidWave on the other end to query it and drive playback. What does cross over: any mix you generate in liquidWave can be saved as a real Emby playlist with one tap — it then shows up in every Emby app straight away. So you could use liquidWave purely as a playlist-generation tool if you wanted; build your sonic mixes there, save them, and play them wherever you like. The coordinator also exposes interactive API docs at /docs (it's a FastAPI service), so if you're comfortable with a bit of DIY you could query it directly and do whatever you want with the results — but that's not a supported path, just an open door. The natural integration point, and I say this knowing you're part of the Emby team — if Emby were to expose a "similar tracks" or "instant mix" provider interface at the server level, the plugin could proxy those requests straight through to the coordinator and every Emby app would get the sonic features for free. That would be the clean version of what I've had to build a separate app to do. For now liquidWave is the intended front end, but it's a good point about the separation — and an interesting conversation if there's ever appetite on the Emby side for something like that.
kaj 342 Posted Saturday at 07:37 AM Author Posted Saturday at 07:37 AM Quick correction to my opening post: AudioMuse-AI has supported Emby since October 2025 and I should have known that before claiming there was no solution. Apologies for the inaccurate claim.
ebr 16456 Posted Saturday at 01:16 PM Posted Saturday at 01:16 PM 16 hours ago, kaj said: So you could use liquidWave purely as a playlist-generation tool if you wanted But Android-only, right? 16 hours ago, kaj said: if Emby were to expose a "similar tracks" or "instant mix" provider interface at the server level Hmmm...
kaj 342 Posted Saturday at 01:20 PM Author Posted Saturday at 01:20 PM 2 minutes ago, ebr said: But Android-only, right? Hmmm... Android first, if it works well then the plan is iOS too. Shouldn't be that hard to port the front end app
kaj 342 Posted 9 hours ago Author Posted 9 hours ago 19 hours ago, mirloc said: I love to give this a try. I'll DM you, thanks
ginjaninja 618 Posted 6 hours ago Posted 6 hours ago Hi @kaj, i am interested to test your solution, sounds interesting; im into music and the wife is into audiobooks. My GPU is a 4090 9800x3d and the library is 70K tracks. In case its of interest Ive been testing https://github.com/saitatter/pylrcget . In particular changing plain text lyrics into timed text lyrics where none exist with various amounts of success, maybe that's functionally adjacent to what your doing.
kaj 342 Posted 1 hour ago Author Posted 1 hour ago 5 hours ago, ginjaninja said: Hi @kaj, i am interested to test your solution, sounds interesting; im into music and the wife is into audiobooks. My GPU is a 4090 9800x3d and the library is 70K tracks. In case its of interest Ive been testing https://github.com/saitatter/pylrcget . In particular changing plain text lyrics into timed text lyrics where none exist with various amounts of success, maybe that's functionally adjacent to what your doing. Hey — thanks, would love to have you on the beta Your setup is honestly close to ideal for it. Music + audiobooks: both are covered. The sonic features (similar tracks, radio, "sonic adventures" that morph A→B, auto-mixes) run on your music library. Audiobooks live in their own Emby library and are deliberately kept out of the sonic analysis — so your wife's audiobooks still get full browse/playback/resume in the app, but spoken word never pollutes the music similarity. Best of both. That GPU is genuinely useful to me. The analysis is neural audio embedding (PANNs CNN14), and there's a CUDA worker that I've built but haven't been able to verify on real NVIDIA hardware yet — a 4090 would chew through a 70K library far faster than CPU. If you're up for it, confirming the worker actually picks up the card (it logs device=cuda on startup) would be a real help, and you'd get the fastest possible first scan out of it. Heads up that a 70K initial scan is a background marathon regardless — but it runs incrementally and new tracks get picked up automatically after. On pylrcget / timed lyrics: interesting project — I can see the appeal. It's adjacent in the "make your library richer" sense, but mechanically it's a different beast: emby-sonic analyses the audio itself (timbre, texture, sonic fingerprint) rather than anything in the lyrics/text. So not overlapping, but I like where your head's at. Can you send me your GitHub username and I'll DM you the onboarding bits — the Android app APK, the Emby plugin, and a quick-start for the coordinator + GPU worker. What Emby server version are you on, and is the 4090 box the one running Emby or a separate machine on the LAN?
kaj 342 Posted 44 minutes ago Author Posted 44 minutes ago (edited) Update — progress since the original post Quick update for anyone following along (and the folks who've already put their hand up — thanks!). Things have moved on a fair bit since I first posted: A web app is coming — so it won't be Android-only. This is the big one. The original post said Android-only with iOS "a much later maybe." That's changed: I'm building a browser-based web app (PWA) that'll run on iPhone, iPad, and desktop — anything with a browser. It works because the heavy lifting already lives in the backend; the app just asks it for playlists and streams audio straight from your Emby server. A couple of people mentioned they don't run Android phones, so this opens it up to everyone. It's early days, but it's actively in progress. Volume normalisation. One I didn't mention first time round: the app levels playback so a quiet track and a slammed modern master sit at a similar loudness (like Spotify/Tidal do), using loudness the backend measures during analysis. On by default, one toggle to turn off. On-device token encryption — done. I flagged this as a known rough edge last time. Your Emby session token on the phone is now encrypted at rest (Android Keystore), with a seamless migration so you stay logged in. Rolling into the next build. GPU acceleration for the analysis worker. If you've got an NVIDIA card, the worker can now use it (it logs device=cuda on startup) — a big help on a large library. How you enable it depends on the worker's OS: on Linux, the Docker CUDA worker (TORCH_VARIANT=cuda + --gpus all); on Windows, just run the worker natively with the CUDA PyTorch wheel (no Docker faff). Either way it auto-detects the card. CPU still works everywhere — it's just slower. Snappier + more polished. Faster library browsing (cached so reopening is instant and lighter on your server), the Sonic Adventure screen now scrolls as one smooth list, and various smaller fixes from real tester feedback. Marching toward a cleaner public release. Release-build hardening (smaller, optimised, properly signed APK) is now in place behind the scenes — groundwork for when this eventually goes public. Still looking for a few more testers — especially anyone with a GPU (I'd love more confirmation of the CUDA path on different cards) or a big library. Same deal as before: reply or DM with a rough picture of your setup (Emby host OS, GPU or not, library size) and I'll send you the files + repo access. Cheers — still very much a labour of love. It's a private GitHub project, so if you send me your GitHub username I can add you and send further info Edited 33 minutes ago by kaj
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now