Hi all,
Update: docker builds available now in beta3, lots more features like guided set up if you keep reading
-–
I’ve been working on something I’ve wanted for a long time: hqpweb, a simple web controller for HQPlayer that works nicely on a phone (or tablet, or computer, but it does work great on a phone).
Why? HQPlayer is one of the most cherished parts of my audio chain. It does magic. But the interface leaves something to be desired, and I’m not an audio engineer, I’m a guy who likes usability. So I put a layer on top. If it makes HQPlayer easier and gets a few more people into actively playing with filters, which I found that I wasn’t really doing as much as I once did, that’s all I’m hoping for.
What it does:
-
The stuff you actually change, up front: 1x and Nx filters, dither/modulator, volume and presets, all reachable without scrolling on a phone.
-
Checks every change. It reads HQPlayer’s settings back instead of trusting “OK”. If a change stops playback or HQPlayer can’t keep up, it rolls back automatically, remembers the combination, and warns you next time. One-tap undo too.
-
Shows whether HQPlayer is keeping up with your choice of filters/modulators/rate: “Real-time ✓”, “Straining” or “Falling behind”, measured from playback itself, so it works without access to the machine.
-
Presets: save your current settings with a name, then use them on any instance. It tells you before you tap whether a preset is a quick change or a mode/rate change.
-
Advanced section for mode, output rate, convolution on/off, matrix profiles and the toggles. Mostly stuff that will stop playback.
-
Volume safety: never jumps up more than 6 dB at a time, and undo/rollback never raise it.
-
Optional Roon integration: track, artist, cover art, a seek slider, and working play/pause/skip for the zone that feeds each HQPlayer. Off by default; everything else works without Roon.
-
Works with HQPlayer Desktop (tested on 5.17.2, macOS and Linux). Embedded should work, since it’s the same control protocol, but I haven’t tested it yet. v6 should work too, but I haven’t tested it because I don’t have it. Reports very welcome.
-
Ships in Docker: three commands, then add your HQPlayer by address (or discovery - tbd how well this works in the wild!).
What it isn’t:
-
Not a music player or library browser. That’s Roon’s job (or HQPlayer’s own Client).
-
Not a configuration tool like HQPTuner, which does a lovely job on Embedded’s deeper settings. hqpweb is the everyday remote.
-
It can’t switch profiles or outputs/NAAs. HQPlayer’s control protocol doesn’t allow it (loading a saved configuration is reserved for Signalyst’s own Client). If that changes, I’ll add it!
-
I haven’t yet integrated the manual content into tooltips for filters. Coming soon I hope - flipping to the manual is something I find myself doing all the time!
How it was made: honestly, with a lot of help from an AI coding assistant. I couldn’t have built it alone. I tried hard to make it solid:
-
HQPlayer’s behaviour was measured on real instances and written up;
-
every change is verified and can be rolled back;
-
it has automated tests and has had security reviews.
It’s an alpha, so it’ll have rough edges. I’d really love feedback, especially from Embedded, HQPlayer 6 or Windows users, since those are the setups I can’t test. There’s a short testing guide in the repo, or just reply here. For instance, when switching songs it sometimes says “HQPlayer isn’t keeping up” when it is keeping up just fine, so I need to tune that.
Notes/thanks: Not affiliated with Signalyst or Roon Labs. Big thanks to @jussi_laako for HQPlayer and for publishing the control SDK that makes this possible. Also to @MusicD and @ohwowgorillas for the inspiration to believe I could build something like this.
Pretty pictures! (from a WPA saved to home page on the iPhone - it has a pretty app icon and all if you decide to do that!); note that here I’m playing PCM to a cherished older DAC, it works just fine in DSD too obviously!






