Harmonium — a fast, activity-based universal-remote (and browser) platform for Home Assistant (open beta via HACS)

I have a jumble of remotes on my coffee table. Even today, in 2026.

There are hardware remotes out there — the Astrion, Haptique RS90, the Unfolded Circle — with exactly the right form factor, but the software isn’t (IMO) ready for daily-driver duty, and most of it is closed source. Two of them, the Astrion and the RS90, run stock Android under the hood — but their modest hardware can’t cope with the firehose of Lovelace connections that comes with the HA Companion app, which is why all these vendors end up building custom UIs in the first place.

So I built Harmonium: a single, dependency-free web page that cold-boots fast even on an ancient webview and gives me a performant, activity-centric workflow — one button for “Watch Fire TV” or “Listen to Music”, along with Presets and Device control — that let me actually retire the pile of remotes on the coffee table(s). It’s been running my house for a couple of weeks, and it’s now in open beta on HACS.

p.s. A Browser is a first class citizen too.

A few minutes watching short videos, says it better than I can:

Much more comprensive info at the repo:

How it works: everything lives HA-side. Activities call your existing scripts and scenes; the engine talks straight to the HA websocket with one token per remote, minted with a pairing code — nothing copied around. You build it all visually in the Studio (an HA panel) where the live preview IS the real engine, rendered inside a photo of your actual remote, physical buttons mapped by dragging hotspots onto the photo. There’s a full music library browser (Music Assistant / Sonos), a hardware-key doctrine, per-remote skins, and battery alerts that fire even while the device sleeps. If you ever loved the Logitech Harmony way of doing things, the activity model will feel familiar.

Hardware: any browser is a remote — a wall tablet, an old phone, a spare laptop tab. My daily driver is the Astrion (~$180, stock Android, real buttons) and a Haptique RS90; @thebradleysanders excellent sideloading guide gets you from box to Fully Kiosk, and there’s a dedicated Astrion thread over on the Sanytron forum. One caution from my own bench: skip the guide’s “install the HA Companion app” step — a background wake lock kept my unit from ever deep-sleeping, and Harmonium doesn’t need it.

This is an open beta and I’d love volunteers: install it, break it, and tell me what happened — bugs, rough edges, and feature requests all welcome as GitHub issues. And if your streaming platform isn’t covered yet (Fire TV, Google TV and Tizen ship today), app launching is driven by small JSON “dialects” — the creating-a-dialect cookbook walks through an Apple TV example end to end, and dialect PRs are very welcome.

Sounds fantastic - I’ll give this a go.

Will install over the weekend.

I’ve installed and only started to scrath the surface so far but this looks fantastic and I’m really looking forward to digging in.

I have an Astrion remote I bought when it was released but it’s been sitting in my drawer unused because the software was terrible. From what I’ve seen so far this will bring new life into it and be a huge upgrade.

Thanks so much for all of the work on this and sharing!

This looks great. From your testing so far can you advise which remote will work best (most reliable/responsive) with this? The Sanytron Astrion or the Haptique RS90.

nice project. I dont see a way to purchase the Haptique .. and they have a ‘X’ revision posted saying “coming soon”.

If we can get a fast/responsive remote with seamless HA integration for under $200 usd, I’m all in. I really dont need a screen on my remote, been using Harmony Companion remote but it would be a nice bonus to have an ‘instant on’ touchscreen

Hey - did the install work as advertised or did you have to jump through hoops?
Thank you for spinning it up.
Desperate for feedback and bugs and feature requests etc…

Great question. Gimme a few days to answer that. I only got the RS90 up and running a day or so ago.

Over the next few days I’ll do an A-B. Especially on things like battery life off the cradle.

s.

The install was absolutely painless and the project started right up without having to jump through any hoops.

I’ve started configuring, but a lot isn’t obvious to me and I’m going to need to find some time to wrap my head around a lot of the concepts and terms that are used. It seems really powerful though and I haven’t run into any obvious bugs so far.

I played around with this a bit over the weekend. It seems like it has a lot of promise.

There are probably a bunch of little things I did along the way that I should have written down, but a big one I ran into was buttons controlling only the remote rather than being mapped through the browser. I needed to enable expert mode in Key Mapper, which needed a shell script run through ADB.

I’m still having trouble with buttons and commands not working with my Apple TV. It’s saying command not recognized and it’s not a button mapping problem, I get the same errors when hitting buttons through the preview display. I don’t see how commands get mapped into home assistant commands; it seems like “dialects” are supposed to do that and the help mentions editing them but the closest I could find is “Apps” configuration that doesn’t actually include mapping commands, just how to handle launching apps on a particular device.

From a more visual standpoint, it would be nice to be able to adjust the height of individual cards. For example, on the Watch TV controller pages I’d like to have a nearly full screen visualization with artwork for what’s currently playing but I don’t see a way to adjust just that card’s height.

Thanks again for all of the work on this! I’m assuming AI played a huge role but it still needs guidance and time working with it.

Thanks. On it. Stay tuned.

Awesome! That’s exactly what I was looking for.

It took me a while to understand how to model my environment, where to put what, etc. I had no Harmony before, so I am not completely aware of all the concepts. But after some trial & error, docs studies, and your YT videos, I think I got most of my stuff working. Yeah! I don’t have a physical remote, however, I appreciate that Harmonium provides the WebUI so that I can use it on my old iPhone and iPad.

Three things I have noted so far:

  • Some bands were missing on the stock controllers (e.g., Music Media Player): presets, speakers, groups, devices. It took me a while to find out what is actually missing, because I couldn’t see the presets I had added within my activities. I don’t know if I did anything wrong, but I don’t think I had deleted them. Nevermind, now it works.
  • Is it possible to change the activity also from the home assistant side, e.g., through a Lovelace button or an automation? I tried calling the “set_activity” service passing over the activity slug, but nothing seemed to happen.
  • Sometimes the power off button on the room page disappears, even if an activity is still active. Couldn’t figure out yet how to reproduce it, or if it’s current missing, how to get it back.

Thanks again! Looking forward to all upcoming enhancements!

Hi @fahrer

You uncovered some gaps and bugs. Fixing now.
Can you (or anyone) do me a favor and get the state of your apple tv media player.
In particular I’m looking for the yaml of the sources key, but maybe paste it all!

Below is a firetv version (I dont have an apple tv).

Hi,

Could you explain #2 (change activity), with a use case and #3 (power button) [im guessing you mean in a browser? - but which power button? Maybe you can take a screenshot.

The Apple TV source list is generally just the app name but sometimes it can vary a little bit. I created a new “App” for Apple TV under Building Blocks and launching apps directly using it works great. I pasted my full entry for one of my Apple TV’s below.

source_list: A&E, ABC, ABC News Live, AHC GO, Amazon Music, AMC, AMC+, Animal Planet GO, App Store, Arcade, BBCA, Bravo, Channels, CNN, Comedy Central, Computers, Cooking Channel GO, Destination America GO, Discovery GO, discovery+, Disney+, DIY Network GO, DW, EPIX, FaceTime, Fandango, Fitness, Food Network GO, FOX NOW, Freeform, FXNOW, HBO GO, HBO Max, HGTV GO, HISTORY, HISTORY Vault, Home Ambience, Hulu, iHeartRadio, In The Kitchen, Investigation Discovery GO, Movies Anywhere, Music, Nat Geo TV, NBC, NBC News, Netflix, NPR One, Pandora, Paramount+, PBS, Philo, Photos, Plex, Pluto TV, Podcasts, Prime Video, Protect, Science Channel GO, Search, Settings, Showtime Anytime, Smithsonian Channel, Spotify, STARZ, Sundance Now, SYFY, Tagesschau, TBS, TCM, TED, The CW, TheOregonTrail, TLC GO, TNT, Travel Channel GO, Tubi, TV, USA, VLC, YouTube, YouTube TV
media_content_type: video
media_duration: 592
media_position: 277
media_position_updated_at: 2026-08-24T23:28:20.876597+00:00
media_title: 
app_id: de.tagesschau.Tagesschau
app_name: Tagesschau
friendly_name: Great Room Apple TV
supported_features: 450487

THANK YOU.

To try and keep this forum as clean as possible, I’ve opened a Github issue on my repo to resolve your problems/ideas. So let’s chat there until we nail your issue(s) and we can report back to this thread then ==> Github issue thread

All three items have been fixed (I hope) in v0.85.6. Apple TV works now (you were right, it was a dialect problem — a stock Apple TV dialect now ships preconfigured - but needs testing because I don’t have one). Expert Mode is documented in the hardware-keys guide, and for card size there’s a new near-full-screen Art Hero — Large Now Playing style. Before updating, export your config (Studio → Export) as a safety net — then HACS update, restart HA, open the Studio and Save & Deploy once.

Thanks for writing all three down — the missing bands turned out to be a real bug with a long history. Fixed in v0.85.6 (I hope): fresh installs now get the complete Music controller from first boot. set_activity is working as designed (routing only) but you’ve convinced me it should take a `start: true` option — it’s on the list. Before updating, export your config (Studio → Export) as a safety net — then HACS update, restart HA, open the Studio and Save & Deploy once.

I created a Github issue so we don’t clutter this thread.

I was literally about to sell my Astrion remote as it just doesn’t feel ready - not even for a tech person like me (and that’s coming from using a UC3 as my main remote!) I’ll give this a shot and see if it changes my mind

Thanks, I will add my response to the GH issue :slight_smile:

A little side question: Is there a way how I can open subpages by URL, e.g., by specifying a HTTP GET parameter? I have a main page that links to the different rooms. Since I am using the UI in a browser, this would help to directly jump to the room page. The only option that I found was to use separate workspaces to implement this.

If you mean a tile that takes you to another page, it’s already there. See below.
There’s also the concept of a true home page. If you mean link to a page from the outside, you’ll have it before the day is out!