v2.0-SNAPSHOT Pre-Release (83)
Pre-release
Pre-release
·
204 commits
to main
since this release
PCPanel Controller Software
- The entire user interface has been rebuilt from the ground up with a brand-new design — a custom dark theme replacing the old windows, covering the device view, action assignment, lighting and settings.
- The underlying framework has been replaced to be more efficient. On my local machine, this results in 100mb memory usage instead of 500mb (for both Windows and Linux).
- The app now supports controllers beyond PCPanel through a generalized device layer. PCPanel hardware works exactly as before (and with zero setup), while other devices can be added and bound to the same actions through the same UI.
- Deej — add the open-source Arduino serial volume mixer by its serial port; its sliders map to the same actions as PCPanel dials (no buttons/lights).
- MIDI controller support is in progress.
- Turn a dial or slider into a multi-position stepped switch: split its travel into ranges, give each range its own actions (any number) and its own LED feedback colour. The actions fire the moment you move into a range (moving within a range does nothing), and gaps between ranges act as dead-zones. Put a Switch profile action on each position to flip between many profiles from a single dial.
- New per-device base layer: mark one profile as the fallback used for any control the active profile leaves unconfigured or unlit — actions, lighting and mute colours included. Inherited actions appear on the on-screen device as a dashed chip you can click to edit in place. Combined with a stepped switch on the base layer, a single profile-selector dial keeps working in every profile.
- A Brightness dial now controls the global LED brightness as a live runtime value: it wins over each profile's saved brightness and stays put across profile switches, so you configure it once (in any profile) and it governs everywhere. When more than one is configured, the best is chosen automatically.
- The per-control "change colour when muted" option is now an explicit on/off toggle, so black (
#000000) is a usable muted colour instead of being treated as "off". - Restored System Sounds as a target for the App volume and App mute actions (it had gone missing from the app picker).
- The Device volume and Device mute actions now offer a selectable Default device option, so an empty choice is shown and selectable as the default output device.
- The on-screen volume overlay icon is now freely choosable per control: pick any running app's icon, or upload your own image (set it under a control's Overlay icon picker). Picking an app icon also works again — a chosen app icon previously failed to show on the overlay (#121, #122).
- Java 25 is now required to run the software. The installer will include it.
- The Windows installer now closes a running PCPanel by itself before updating, instead of asking you to close it manually — it shuts the running instance down cleanly (saving your settings) and only force-closes it as a fallback.
- One-click updates on Windows and Linux: when a new version is available, the notification's "Update & restart" button installs it and restarts the app for you — no manual download or clicking through an installer. On Windows it runs the installer silently (keeping your existing install location); a Linux AppImage updates itself in place, downloading only the changed parts; and a Flatpak updates from its hosted repository. The page you started from reconnects on its own and confirms with a short "up to date" dialog. On macOS the notification still links to the download page.
- New update settings (under "Check for updates on startup"): Automatically install updates (Windows and Linux, off by default) applies a newer version on startup without any prompts; and Check for pre-release versions opts in to in-development snapshot builds rather than only stable releases.
- Linux install for automatic updates: install the Flatpak from the hosted repository via a
.flatpakreflink to get background updates through your software centre (GNOME Software / KDE Discover) orflatpak update; the AppImage self-updates through its bundled updater. A one-shot.flatpakbundle is still attached to each release but does not receive updates. See linux.md. - The Settings → Debug page has a new Check for updates now button that runs the update check on demand — surfacing the new-version popup if one is found, or confirming you're already up to date.
- #87 - Experimental macOS support (community contributed by Choaterboater, ported to the new Quarkus build). Device volume/mute/default-device switching via Core Audio, keystrokes, shortcuts and Music/Spotify media control. See the macOS instructions.
- (macOS) Per-application volume / mute and focused-app volume, on macOS 14.4 or newer, implemented natively with Core Audio process taps — no extra software needed. PCPanel taps the target app's audio and re-renders it at the dial's volume; returning the dial to full volume detaches from the app's audio path entirely. Requires the System Audio Recording permission (macOS prompts on first use). Tested with automated audio-measurement tests and a native build on GitHub's macOS (Apple Silicon) CI runners, but not yet on an actual Mac in real use — treat it as experimental and please report how it behaves.
- Profiles are now saved on application exit, so a change made right before quitting is no longer lost.
- Added support for Elgato Wave Link, enable it in the settings to add the dial/button commands
- Input devices not yet supported (I don't have one so can't debug)
- Dials/sliders allow changing volume for Channels, Mixes and Output devices
- Buttons allow setting mute state, changing the main output, add the focus app to a mix and/or toggle effects
- Focus-control Wave Link (on by default, toggleable on the Wave Link settings page): when an app Wave Link controls has focus, the Focused-app volume dial controls that app's Wave Link channel instead of its OS volume — and it switches live the moment you add or remove the app from a channel.
- Optional Set volume of controlled apps: when a Wave-Link-controlled app has focus, pin its OS volume to a configurable percentage (default 100%) so Wave Link does the real mixing — e.g. an app you'd dropped to 50% jumps back up once Wave Link controls it.
- Added support for Home Assistant — control your smart home from your dials and buttons
- Configure one or more servers (base URL + long-lived access token) on the Home Assistant settings page; actions pick the server automatically when there's only one
- Actions are pasted as YAML straight from Home Assistant's Developer Tools → Actions page (with a link to open it), so anything Home Assistant can do is available
- Buttons perform any action; dials map their position into the action — use
{{ value }}with a min/max range or a translate formula (e.g. a light's brightness or color temperature) - Configurable debounce so a moving dial doesn't flood Home Assistant: the first move is sent instantly, then at most one update per the configured interval, and the final value is always sent
- Added support for Discord — control your Discord voice state from your dials and buttons. Discord only grants voice control to an application's owner, so each user registers their own free Discord app once and pastes its Client ID + Secret on the Discord settings page (a step-by-step setup checklist is shown in-app); it connects over Discord's local IPC — no bot, no token in the cloud.
- Mute & deafen buttons — mute/unmute or deafen/undeafen yourself, or locally mute another member (only changes what you hear). One Mute command with a target picker: yourself or any user.
- Volume dials — your microphone, your output (how loud you hear everyone), or how loud you hear a specific member, each with an optional unmute/undeafen when changed.
- Join / leave a voice channel from a button (pick from your servers' voice channels).
- Screen share and toggle camera buttons — share via Discord's own picker ("Choose in Discord"), the focused window, or a specific app. Per-window sharing by PID is best-effort (it uses an undocumented Discord RPC command); the picker mode is reliable.
- The per-control mute colour follows your Discord self-mute, self-deafen and a user's local-mute state — including when you toggle it in Discord directly.
- Target pickers are searchable and list the members you've controlled plus, optionally, your Discord friends (needs the Social SDK Terms accepted for your app).
- New General setting Focus volume skips controlled apps (off by default): when the focused app is already controlled elsewhere — an App-volume action on another control, or a Wave Link channel — the focused-app volume dial leaves it alone instead of fighting that dedicated control.
- #49 - New Focus Volume Override settings tab: redirect the Focused-app volume dial elsewhere for chosen apps. Each rule has one or more source apps; when any of them is focused the dial drives the rule's targets instead. Targets can be any volume action (App/Device volume, Wave Link channel, OBS source, generic HTTP/MQTT/OSC output, …) and are all controlled at once, on every audio device the target plays on. An optional also control the source app toggle covers apps that don't play audio themselves but spawn a helper that does — point Steam at
steamwebhelper.exeand leave the silent launcher alone, or control every browser at once from one dial. A detect focused app button captures whatever Windows reports as focused (which often isn't the launcher — Steam's window issteamwebhelper.exe), so picking the right source isn't guesswork. - Push-to-talk — buttons can now run a separate set of actions when released, not just when pressed (e.g. unmute on press, mute on release). Configure it under the new "On release" tab when editing a button.
- New generic output actions for dials and buttons, so you can drive almost anything:
- HTTP request (URL, method, headers, body), MQTT publish (topic + payload, reusing the MQTT connection) and OSC send (address).
- On a dial the position maps into the message via
{{ value }}with a min/max range or a translate formula; on a button it sends at full scale — the same value model as the Home Assistant action.
- Expanded OBS actions: start/stop/toggle streaming, recording (including pause/resume), virtual camera and replay buffer — alongside the existing scene switch, source mute and source volume.
- The per-control mute colour now follows OBS and Wave Link mute buttons too, not just their volume dials: a button that mutes an OBS source or a Wave Link channel lights its control in the muted colour while that target is muted.
- Attempts to improve Wayland tray support (now works on Ubuntu)
- #74 - (Linux) New audio sessions should trigger initial volume setting
- #74 - (Linux) New setting 'Force application volume to panel volume', this tries to reset the volume when an application changes it. This seems to solve for instance Firefox from going back to 100% when playing a new song.
- #74 - (Linux) Allow using kdotool for getting the active window on Wayland and control its volume, see linux instructions for more information
- #88 - (Linux) Focus volume now works for sandboxed (Flatpak) apps. Flatpak apps report a sandbox-internal PID to PipeWire that never matched the host PID from KWin, so the focused-app knob silently did nothing; it now also matches the focused window's app id (
pipewire.access.portal.app_id) across the sandbox boundary. - (Linux)
kdotoolis now bundled with the.deb, AppImage and Flatpak, so focus volume works out of the box on KDE Plasma (Wayland and X11) without installing anything. Inside the Flatpak it runs in the sandbox and drives the host KWin over D-Bus.kdotoolcovers X11 too, soxdotoolis no longer needed alongside it. If no window tool is available the app now logs a clear warning and shows a desktop notification instead of failing silently. - (Linux) The version shown in the UI now includes the build number for official GitHub builds (e.g.
v2.0.123) instead of justv2.0-SNAPSHOT. - There is now a Quit button in the settings (General tab), so you can stop the app from the UI on any platform instead of killing it from a terminal — handy on macOS, which has no tray icon yet (#104).
- When no device is connected the UI shows a clear "No PCPanel connected" state with platform-specific help (the Linux device-access rule, the macOS Input Monitoring permission) instead of an endless spinner (#104).
- First run now opens the UI in your browser with a short welcome and a link to the setup instructions, and there's a new General setting to open the UI in the browser whenever the app starts (off by default — it otherwise just sits in the tray). On Windows the browser also opens once right after installing.
- #105 - (macOS) Fixed every Core Audio volume and mute action failing with a JNA reflection error in the packaged app (
ByteByReferencewas not registered for the native image). - #100 - (Linux) The Wayland tray now has a proper right-click menu — Open PCPanel, Open settings folder (the data dir holding your
profiles.json, withlogs/inside it) and Quit — matching the Windows tray, instead of quitting the app on a right or middle click. - #106 - (macOS) Fixed the audio device dropdown ignoring clicks: picking a device now actually selects it. The option list could rebuild mid-click and drop the click; it no longer does (also fixes the Wave Link channel/mix dropdowns).
- #107 - (Linux) Fixed the system tray not appearing in the Flatpak — the sandbox was missing permission to own its tray name.
- #107 - (Linux) Fixed devices being detected but never opening. The bundled HID library now uses the hidraw backend, which needs a
hidrawudev access rule. The.debinstalls it automatically; AppImage/Flatpak/manual installs must add the newhidrawlines to their rule (see linux.md) — a usb-only rule from an older version is no longer enough.