Releases: ninoleto/companion-surface-loupedeck-split-strips
Release list
Loupedeck separated strip buttons v1.1.3
Loupedeck separated strip buttons v1.1.3
Version 1.1.3 supersedes v1.1.2 and rebuilds the separated strip-button feature on top of the latest official Bitfocus Loupedeck surface module.
The official native strip layout is now preserved correctly when the option is disabled, while users who prefer the earlier workflow can still enable separated 60 × 60 square buttons.
Why separated buttons exist
This layout began as a personal custom module used with Companion 4.x. It divided each vertical touch strip into three separated square buttons, making the controls more reliable during live use.
When Companion 5 was released, the original personal Companion 4.x module no longer worked correctly. It therefore had to be adapted for Companion 5 so that the vertical strips would behave as they did in the original 4.x version. That adapted version was released publicly as v1.1.0.
A few days later, Bitfocus released the official Loupedeck surface module v1.1.1. It introduced native full-height controls that use the entire vertical strip area.
However, the vertical strips are continuous touch surfaces without physical dividers between the three controls. With the larger adjacent touch areas, it became possible to press two neighboring controls at the same time or trigger the wrong control when a finger landed on or moved across the strip at an angle.
Because of this, the separated 60 × 60 layout was restored and released as v1.1.2.
Version 1.1.3 now supports both workflows correctly through one optional switch:
- The latest official native strip layout when separated buttons are disabled
- Separated 60 × 60 square buttons with touch-inactive gaps when enabled
The detailed explanation and original visual comparison are available in the v1.1.2 release notes. Version 1.1.3 focuses on preserving both layouts correctly and allowing users to choose the layout that works best for them.
What was corrected in v1.1.3
The v1.1.2 implementation registered only 60 × 60 artwork.
Because of this, disabling the separated layout did not restore true official native rendering. The square artwork remained in use, with the surrounding area filled to cover the complete strip cell.
Version 1.1.3 fixes this by registering two independent layouts when the surface starts:
- The latest official native strip layout
- The optional separated 60 × 60 layout
Each layout has its own internal control IDs. Only the selected layout is rendered and receives touch events.
The latest button images are cached, allowing the module to redraw the strips immediately when the setting changes. Companion does not need to be restarted when switching layouts.
Separated strip buttons disabled
The module uses the latest official native strip behavior:
- Official native dimensions and edge padding
- Full-height Companion artwork
- Full native touch areas
- Correct rendering of gradients, circles and continuous graphics
- No stretching, interpolation or extension of square artwork
Separated strip buttons enabled
The module uses the optional separated layout:
- Native 60 × 60 square artwork
- Three separated controls on each vertical strip
- A 15-pixel black area above and below each button
- Black areas that do not respond to touch
- Reduced chance of activating a neighboring control
- Text and icons that remain square and unstretched
Additional improvements
- Switching layouts works immediately while Companion is running
- Touch events are routed only to the selected layout
- Touch IDs are tracked so that the release event is sent to the control that originally received the press
- Existing strip graphics are restored immediately after changing the setting
- Legacy fader/slider mode remains available
- The latest official strip edge-padding changes are preserved
Installation
Download:
companion-surface-loupedeck-separated-strips-v1.1.3.tgz
Do not extract the file.
In Companion:
- Open Modules
- Click Import module package
- Select
companion-surface-loupedeck-separated-strips-v1.1.3.tgz - Do not use Import offline module bundle
- Open Surfaces
- Add or edit the Loupedeck surface integration
- Select module version 1.1.3
- Set LCD strip mode to Split buttons
- Enable Separated strip buttons (60 × 60) to use the optional square layout
Disable the option at any time to return to the official native strip layout.
Completely close the official Loupedeck or Razer Stream Controller software before using the controller with Companion. The official software may retain control of the USB device.
Compatibility
Built and physically tested with:
- Bitfocus Companion 5
- Razer Stream Controller
- Linux headless Companion
The module also supports Loupedeck Live devices supported by the official Bitfocus Loupedeck surface module.
This release is not intended for Companion 4.x.
Important information
- This is an unofficial Companion surface module
- It is based on the official open-source Bitfocus Loupedeck surface module
- It does not modify the controller firmware
- It does not modify the official Loupedeck or Razer software
- The separated layout is completely optional
- With the option disabled, the latest official native strip behavior is retained
- Back up your Companion configuration before installing custom modules
The module was developed and documented with assistance from ChatGPT and physically tested in a real Companion 5 setup.
Released under the MIT License.
Loupedeck separated strip buttons v1.1.2
This is an unofficial Bitfocus Companion 5 surface module for the Loupedeck Live and Razer Stream Controller.
It is based on the official Bitfocus Loupedeck surface module v1.1.1 and adds an optional layout with separated 60 × 60 buttons on the two vertical touch strips.
Official v1.1.1 native 60 × 90 strip controls compared with the unofficial v1.1.2 separated 60 × 60 layout.
Why I made this version
Important
The main reason for this module is touch accuracy. The vertical strips are continuous touch surfaces with no physical dividers, so full 60 × 90 touch areas can make accidental presses more likely. The separated 60 × 60 mode adds visible, touch-inactive gaps between neighboring controls.
The official Companion 5 Loupedeck module renders each vertical-strip control natively across the complete 60 × 90 area.
That full-height layout provides more space for text, graphics, gradients and continuous designs. It is useful for people who want to use every available pixel of the strip display.
However, it does not work well for my personal workflow.
The controller’s central 4 × 3 grid contains twelve LCD buttons. Each button is physically separated from the neighboring buttons by a plastic frame. These physical dividers give the finger a clear boundary, so accidentally pressing two neighboring buttons is unlikely.
The two vertical touch strips are different. Each strip is one continuous touch surface containing three virtual controls, with no physical divider between them.
When the complete 60 × 90 area of every strip control is touch-active, I often touch the edge of the neighboring control or move into it while pressing. During live use, this can activate the wrong action and interrupt my workflow.
I also have muscle memory from my previous split-strip module, which used smaller square buttons. And honestly, as I get older, I prefer controls that provide a little more margin for error.
For me, reliable touch operation is more important than using every available pixel.
This module therefore keeps the Companion button artwork at 60 × 60 and provides two touch-area options.
Separated strip buttons enabled
- The Companion artwork is displayed as a centered 60 × 60 button.
- Only the central 60 × 60 area responds to touch.
- The 15-pixel areas above and below the button are black and touch-inactive.
- These gaps provide clear visual and touch separation between neighboring controls.
- Text and icons remain square and are not stretched.
- Accidental activation of adjacent strip controls is reduced.
Separated strip buttons disabled
- The Companion artwork remains 60 × 60 and is not stretched.
- The complete 60 × 90 strip cell responds to touch.
- The button background or feedback color is extended into the surrounding area.
- This provides a larger touch target while preserving the original proportions of the artwork.
This module does not replace the official native 60 × 90 rendering. It provides an alternative for users who prefer square artwork, visible separation and more predictable touch control.
Users who want native full-height artwork, gradients or continuous graphics may prefer the official module. Users who experience accidental presses on the continuous touch strips may find the separated 60 × 60 mode more practical.
What v1.1.2 adds
Version 1.1.2 adds:
- Optional Separated strip buttons (60 × 60) setting.
- Centered 60 × 60 strip-button artwork.
- Black 15-pixel margins above and below each separated button.
- Touch-inactive margins between adjacent controls.
- Full 60 × 90 touch-area mode when separation is disabled.
- Unstretched text and icons in both modes.
- Correct touch-release handling when a finger moves before being lifted.
- Independent rendering and touch handling for all six strip controls.
The setting is available in the Loupedeck surface integration when:
LCD strip mode: Split buttons
Six additional Companion controls
The two vertical touch strips are divided into six independently programmable Companion controls:
- Three controls on the left strip.
- Three controls on the right strip.
- Six additional Companion controls in total.
The internal control IDs are:
strip-left-0strip-left-1strip-left-2strip-right-0strip-right-1strip-right-2
Each strip control can:
- Display its own Companion button graphic.
- Display independent text, icons and colors.
- Show different button and feedback states.
- Use Companion variables.
- Generate normal press and release events.
- Run any Companion action assigned to it.
The main 4 × 3 button grid, rotary encoders and other controls retain the normal behavior of the official Bitfocus Loupedeck surface module.
Compatibility
Built and tested with:
- Bitfocus Companion 5
- Loupedeck Live
- Razer Stream Controller
The Loupedeck Live and Razer Stream Controller are the same physical control surface sold under different branding.
This release is not intended for Companion 4.x.
Compatibility with later Companion releases is expected, but cannot be guaranteed if the Companion surface API changes.
Download
Download the following file from the Assets section:
companion-surface-loupedeck-separated-strips-v1.1.2.tgz
Do not extract the file when importing it through Companion.
This file is a complete installable Companion surface-module package. It is not:
- A Windows executable.
- A standalone Linux or macOS application.
- A firmware update.
- An update for the official Loupedeck or Razer software.
Normal users do not need Node.js, Yarn, Git, Visual Studio or a compiler.
Recommended installation for Companion 5
1. Download the package
Download:
companion-surface-loupedeck-separated-strips-v1.1.2.tgz
Do not extract the file.
2. Open the Companion Admin interface
Start Companion and open its Admin interface in a browser.
For a local Companion installation, the address is normally:
http://127.0.0.1:8000
For Companion running on another computer, use its hostname or local IP address:
http://COMPANION-IP:8000
3. Import the module package
In the Companion Admin interface:
- Open the Modules page.
- Click Import module package.
- Select
companion-surface-loupedeck-separated-strips-v1.1.2.tgz. - Confirm the import.
Use Import module package.
Do not choose Import offline module bundle. An offline module bundle is a different type of archive containing multiple modules.
4. Add or update the Loupedeck surface integration
Open the Surfaces page.
If the right-hand settings panel is not visible, click Show Settings.
In the Surface Integrations section:
- Click Add Surface Integration.
- Click All Available if it is not already selected.
- Search for Loupedeck.
- Select the Loupedeck surface integration.
- Select module version 1.1.2 if Companion asks which installed version to use.
- Add or enable the integration.
If a Loupedeck surface integration already exists, open its settings and confirm that it is using version 1.1.2.
If Companion does not allow the existing integration to switch versions, remove that surface integration and add it again after importing version 1.1.2.
5. Enable the separated strip layout
Open the settings for the Loupedeck surface integration.
Set:
LCD strip mode: Split buttons
Then enable:
Separated strip buttons (60 × 60)
When enabled, the black margins between the strip buttons do not respond to touch.
When disabled, the complete 60 × 90 area of each strip control remains touch-active.
6. Close the official controller software
Completely close the official Loupedeck or Razer Stream Controller software before using the controller with Companion.
The official application may keep control of the USB device and prevent Companion from opening it.
Check that the application is not still running in the background or system tray.
7. Connect and detect the controller
Connect the Loupedeck Live or Razer Stream Controller directly to the computer running Companion.
Open the Surfaces page and click:
Rescan USB
The controller should appear in the configured surfaces list.
8. Restart if necessary
If version 1.1.2 does not appear immediately:
- Completely stop Companion.
- Start Companion again.
- Open the Modules page and confirm that version 1.1.2 is installed.
- Open the Surfaces page and confirm that the Loupedeck integration uses version 1.1.2.
- Click Rescan USB.
Updating from an older version
- Download
companion-surface-loupedeck-separated-strips-v1.1.2.tgz. - Open Companion’s Modules page.
- Click Import module package.
- Select the new package.
- Confirm the import.
- Open the Surfaces page.
- Open the Loupedeck surface integration.
- Select module version 1.1.2.
- Restart Companion if necessary.
- Click Rescan USB.
Do not keep multiple development copies of companion-surface-loupedeck inside the same developer-module directory.
Troubleshooting
The package will not import
Confirm that you selected:
companion-surface-loupedeck-separated-strips-v1.1.2.tgz
Do not extract the package before importing it.
Use:
Import module package
Do not use:
Import offline module bundle
The separated-button setting does not appear
Confirm that:
- Companion 5 is running.
- Module version 1.1.2 is installed.
- The active Loupedeck sur...
Bitfocus Companion 5.0 Split Touch Strips for Loupedeck Live / Razer Stream Controller – v1.1.0
Important
This release is obsolete and is preserved only for historical reference.
Version 1.1.0 was created before the official Bitfocus Loupedeck module added six independently programmable controls across the two vertical touch strips.
I originally used this split-strip layout with a personal custom module for Companion 4.x. When Companion 5 introduced a new surface-module and rendering system, that implementation no longer worked correctly, so I adapted it for Companion 5 and released it publicly as v1.1.0.
A few days later, the official Bitfocus module v1.1.1 added native support for the same six strip controls, using the full-height strip area. This made the original unofficial v1.1.0 implementation unnecessary for normal installations.
Use:
- The official Bitfocus Loupedeck module for the standard native strip layout.
- Unofficial v1.1.3 for the option to switch between the latest official native layout and separated 60 × 60 strip buttons with touch-inactive gaps.
Version 1.1.0 remains available to document the original Companion 5 adaptation, but it is not recommended for new installations.
Loupedeck split-strips module v1.1.0
Loupedeck Live / Razer Stream Controller using six independent split touch-strip controls
Companion 5 button layout and configuration
This custom Bitfocus Companion 5 surface module converts the two vertical touch-strip displays on the Loupedeck Live / Razer Stream Controller into six independently programmable Companion controls.
The Loupedeck Live and Razer Stream Controller are the same physical control surface sold under different branding. This module supports both versions of the device.
Version 1.1.0 updates the split-touch-strip implementation for Bitfocus Companion 5.0.
What this module does
The controller has two narrow vertical touch displays, one on each side of the main button grid.
This module divides those displays into six independent Companion controls:
- Three controls on the left strip
- Three controls on the right strip
- Six additional programmable Companion controls in total
The internal control IDs are:
strip-left-0
strip-left-1
strip-left-2
strip-right-0
strip-right-1
strip-right-2
Each strip section is exposed to Companion as an independent 60 × 90 pixel RGB bitmap control.
Every strip section can:
- Display its own Companion button graphic
- Display independent text and colors
- Show different button states
- React to Companion feedbacks and variables
- Generate normal press and release events when touched
- Run any Companion actions assigned to that control
The normal buttons, rotary encoders and other standard controls continue to use the behavior of the official Bitfocus Companion Loupedeck surface module.
Changes in v1.1.0
- Updated for Bitfocus Companion 5.0
- Updated the surface schema for the Companion 5 surface-module system
- Restored all six split touch-strip controls
- Added three independent controls to the left vertical strip
- Added three independent controls to the right vertical strip
- Added independent bitmap rendering for every strip section
- Added independent touch press and release handling
- Preserved the normal behavior of the main buttons and rotary encoders
- Packaged as an installable Companion 5 surface-module package
Compatibility
Companion
This release was built and tested for:
Bitfocus Companion 5.0
It is not intended for Companion 4.x.
Compatibility with later Companion releases is expected but cannot be guaranteed if the Companion surface API changes.
Controller
Supported controller names:
- Loupedeck Live
- Razer Stream Controller
These are differently branded versions of the same physical control surface.
Download
Download this file from the Assets section of the release:
companion-surface-loupedeck-split-strips-v1.1.0.tgz
This .tgz file is the complete installable Companion surface-module package.
It is not a Windows executable, Linux application or firmware update.
Normal users do not need:
- Node.js
- Yarn
- Git
- Visual Studio
- A compiler
- The module source code
Recommended installation for Companion 5
This is the preferred installation method for most users.
It uses Companion’s browser-based Admin interface and does not require extracting the package or configuring a developer-module directory.
It can be used with:
- Windows desktop Companion
- macOS desktop Companion
- Linux desktop Companion
- Linux headless Companion
- CompanionPi
- Raspberry Pi installations
- Companion installations managed by a service or startup script
1. Download the package
Download:
companion-surface-loupedeck-split-strips-v1.1.0.tgz
Do not extract the file.
2. Open the Companion Admin interface
Start Companion and open its Admin interface in a web browser.
For a local Companion installation, the address is normally:
http://127.0.0.1:8000
For Companion running on another computer, use its hostname or local IP address:
http://COMPANION-IP:8000
3. Import the module package
In the Companion Admin interface:
- Open the Modules page.
- Click Import module package.
- Select:
companion-surface-loupedeck-split-strips-v1.1.0.tgz
- Confirm the import.
Use Import module package.
Do not choose Import offline module bundle. An offline module bundle is a different archive containing multiple modules.
4. Add or update the Loupedeck surface integration
Open the Surfaces page.
If the right-hand settings panel is not visible, click:
Show Settings
In the Surface Integrations section:
- Click Add Surface Integration.
- Click All Available if it is not already selected.
- Search for Loupedeck.
- Select the Loupedeck surface integration.
- Select module version
1.1.0if Companion asks which installed version to use. - Add or enable the integration.
If a Loupedeck surface integration already exists, open its settings and confirm that it is using version:
1.1.0
If Companion does not allow the existing integration to switch versions, remove that surface integration and add it again after importing version 1.1.0.
5. Close the official controller software
Completely close the official Loupedeck or Razer Stream Controller software before using the controller with Companion.
The official application may keep control of the USB device and prevent Companion from opening it.
Check that the application is not still running in the background or system tray.
6. Connect and detect the controller
Connect the Loupedeck Live / Razer Stream Controller directly to the computer running Companion.
Open the Surfaces page and click:
Rescan USB
The controller should appear in the configured surfaces list.
Companion can also watch for newly connected USB devices when Watch for new USB Devices is enabled in the Surfaces settings.
7. Restart if necessary
If version 1.1.0 does not appear immediately:
- Completely stop Companion.
- Start Companion again.
- Open the Modules page and confirm that version
1.1.0is installed. - Open the Surfaces page and confirm that the Loupedeck integration uses version
1.1.0. - Click Rescan USB.
Windows desktop installation
For normal Windows Companion 5 installations, use the recommended Import module package method above.
You do not need to:
- Extract the
.tgzpackage - Create a developer directory
- Use the Companion Launcher cog
- Install Node.js or Yarn
Use the developer-folder method below only when the package importer is unavailable or when testing the module manually.
macOS desktop installation
For normal macOS Companion 5 installations, use the recommended Import module package method above.
You do not need to extract the package or configure a developer-module directory.
Completely close the official Loupedeck software before attempting to detect the controller in Companion.
Linux desktop installation
For normal Linux desktop Companion 5 installations, use the recommended Import module package method above.
After enabling the Loupedeck surface integration, Companion may report that the Linux USB permission rules need to be installed or updated.
Follow the prompt shown on the Surfaces page, allow Companion to install the generated desktop udev rules, and then:
- Disconnect the controller.
- Reconnect the controller.
- Click Rescan USB.
More detailed Linux USB information is included later in this document.
Advanced desktop installation using the Companion Launcher
This method applies only to installations that have the separate graphical Companion Launcher window.
The Launcher is separate from the browser-based Companion Admin interface.
The cog icon is located in the Companion Launcher window. It does not appear inside the browser interface.
Use this method only when:
- The package importer is unavailable
- You want to...
v1.0.2-nino - Split strip bitmap controls
Original personal Companion 4.x development module
This pre-release contains the original custom Loupedeck surface module I used with Companion 4.x.
It was created to expose the two vertical touch strips as six independent Companion bitmap controls:
strip-left-0strip-left-1strip-left-2strip-right-0strip-right-1strip-right-2
Each strip segment is exposed as an independent 60 × 90 RGB bitmap area and can be programmed like a normal Companion button.
Touching a strip segment sends standard Companion key-down and key-up events, allowing every section to run its own actions, display its own graphics and respond to feedback.
This was originally a personal development module rather than a finished public release. When Companion 5 was released, this original Companion 4.x implementation no longer worked correctly and later became the starting point for the updated Companion 5 versions.
Changes
- Adds six independent bitmap and control areas across the two vertical strips
- Adds three controls to the left strip and three to the right strip
- Exposes each segment as a 60 × 90 RGB bitmap area
- Sends normal Companion key-down and key-up events
- Does not modify the controller firmware
- Does not require changes to the official Loupedeck or Razer software
Important
- This is an experimental historical pre-release
- It was originally developed for my personal Companion 4.x setup
- It is not recommended for current Companion 5 installations
- It is not an official Bitfocus Companion module
- It is preserved as the original version from which the later separated strip-button releases were developed
For Companion 5, use the latest available release instead.
Package
companion-surface-loupedeck-split-strips-1.0.2-nino.tgz
SHA-256
6634e14c137a76ab68e45a8ef8087a9f5b0daf51f5f8760c8872a579fc84cade

