Skip to content

v1.25.0

Choose a tag to compare

@RadiatorTwo RadiatorTwo released this 11 Sep 23:16
· 345 commits to master since this release

What's Changed

Applications and Commands Panel

  • A new side panel lists everything you can put on a button. Opens optionally with a button on the left.
  • Three tabs: applications, commands and dial presets. The command tab is the same picker the button editors use, so core commands, your macros, profile activation and every loaded plugin show up without a second list to maintain.
  • Drag a row straight onto a button, or click it to assign it to the currently selected one. A touch key gets artwork and the command, an LED button and a dial press get the command, and a dial also gets the name as its side-strip label.
  • Unsupported targets are refused instead of silently written, so a row that cannot work on the button under the pointer shows the invalid ring and changes nothing.
  • Applications the scan cannot find can be added by hand. A portable build, a launcher script or a shortcut kept somewhere unusual is stored in its own file and survives both a rescan and a restart.

Launch an Application From a Button

  • Assign an installed application to a touch button from the new picker in the Button panel. It sets the launch command and the icon in one step, so the button is ready to use immediately.
  • Applications are discovered automatically. Windows reads the Start Menu, Steam (including libraries on other drives) and Epic. Linux reads XDG desktop entries, the same source your desktop's own application menu uses, including Flatpak and Snap.
  • Icons are extracted at full resolution where the executable carries one, cached on disk keyed on the file and its timestamp, so a reinstalled or updated application gets a fresh icon rather than a stale one forever.
  • The icon lands at 64x64 by default, which leaves room for a label underneath. Buttons that already carry an app icon keep the size they were given.
  • Assignment is all or nothing. The icon is resolved before anything on the button is written, so a failed extraction can no longer leave a button with a new command and the old artwork. Replacing existing layers is confirmed first.
  • Paths with brackets no longer break. A target such as C:\Program Files (x86)\Steam\steam.exe used to be truncated by the command parser. Parameters are now escaped, and Steam and Epic games launch through their own launcher URIs.
  • Uninstaller entries are filtered by their target, not their name, so they are hidden on a German or Spanish system too.

Input Actions

  • Mouse click and scroll can be bound directly, no macro needed. Mouse Combo holds keyboard keys while it clicks or scrolls, which is what Ctrl-click or Shift-scroll needs.
  • The X1 and X2 side buttons are available everywhere mouse buttons are, on all three input backends. Macro files saved before this load unchanged.
  • Key Sequence plays several presses one after another, which the existing Key Combination cannot do because it holds every key at once.
  • Record a key combination instead of typing it. A small record button beside the parameter captures what you actually press, in press order, and in sequence mode it records one chord after another.
  • Switch virtual desktop from a button with Previous Desktop and Next Desktop. Windows only, because Linux desktops share no equivalent shortcut.
  • Key combinations are now held briefly before release, so system hotkeys such as Win+Ctrl+Left are recognised reliably.
  • All of these work on every button type, so a dial that scrolls the wheel or an LED button that sends a shortcut is just as easy to set up as a touch button.

Dial Presets and the Quick Dial Menu

  • Right-click a dial to bind one gesture directly. The menu offers turn left, turn right and press, each over the full command catalogue, without opening the editor. There is still a way into the editor for anything the quick menu cannot express.
  • Save a configured dial as a preset. A preset is a named set of three commands that can be dropped onto any other dial in one step, from the quick menu, from the rotary command picker or from the panel.
  • Presets are shared across your decks. They live beside your macros rather than in a device config, so one saved on one deck can be applied on another. Renaming and deleting are offered on your own presets, built-in ones can be applied but not changed.
  • A preset on a key or an LED button is refused, since three gestures mean nothing there.
  • Clearing a gesture also clears the dial's side-strip label once nothing is bound any more, so the hardware no longer announces a command that is gone.

Per-Profile LED Buttons

  • The round LED buttons now belong to each profile. A colour or a command changed in one profile no longer changes it in all of them.
  • Old configs migrate automatically. Your current LED row is copied into every profile, so each one starts from exactly what the device displayed before and nothing looks different after the update.
  • Switching profile repaints the LED row and keeps the saved bindings. A workspace switch deliberately leaves it alone, because the physical LED row should not change under you that often.
  • An imported profile brings its LED buttons along. A package exported before this change simply gets the device defaults.
  • A newly created LED button stays dark until something is bound to it. Buttons restored from your config keep their saved colour.

Startup, Connection and Reconnect

  • The app starts even when another program holds the serial port. The vendor's own software or a Logi service often holds it for a moment at boot, which used to end the startup and leave the app unopenable from its icon.
  • A busy port is retried with backoff, and once it frees the app takes it over on its own. No restart and nothing to kill by hand.
  • The splash screen is gone and the window opens first. It no longer waits on the device, so a slow plugin set or a device taking its time no longer leaves you looking at "Connecting to Loupedeck ...". Devices join the shell as their links come up.
  • Start minimized to tray works with no device connected, which dropping the splash had broken.
  • A device only appears in the switcher once its link is up, so you never get a tab backed by nothing.
  • About works with no device connected. It shows the app version and a link to the project page and reaches no hardware, so there was no reason for it to grey out.
  • The empty state explains both ways you can land there, including a deck that is plugged in but whose port another program still holds.
  • The log no longer floods. An unreachable port used to write the same five lines every reconnect cycle. Repeats are now collapsed with a tally at most once every five minutes, an absent port is reported as absent rather than as busy, and the first handshake timeout, which is expected on every start, is no longer reported as a failure.

Fixes

  • Touch presses land on the right key on a calibrated device. On a Live S the right-hand column was off by one, so the bottom-right key did nothing at all and the two above it ran a neighbour's command. The CT and the Stream Controller carried the same fault.
  • Plugins behave correctly with more than one device. Enabling a plugin on a second device used to unload and reload the shared instance, which left every other device bound to the dead one and showing "unavailable" until a restart. Installing or removing a plugin now refreshes every device.
  • Icon extraction no longer fails at startup. Several panels loading icons at once raced for the same cache file, which surfaced as a generic error on launch.
  • An LED button repaint can no longer take the app down when a plugin, the device read loop or a timer drives it from a background thread.
  • A device that fails to switch on is no longer reported as on. A failed push left the app convinced the device was painted while it stayed dark, which made every later repaint do nothing and turned the on/off toggle into a dead button.
  • Failures while talking to the device no longer abort startup. A port that disappears mid-bring-up is logged and skipped, and the next cone.

Other

  • The LinuxHwInfo plugin is now built and bundled with the release.