Skip to content

Releases: ninoleto/companion-surface-loupedeck-split-strips

Loupedeck separated strip buttons v1.1.3

Choose a tag to compare

@ninoleto ninoleto released this 18 Jul 16:17

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.

Loupedeck surface settings showing the separated strip buttons option

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:

  1. Open Modules
  2. Click Import module package
  3. Select companion-surface-loupedeck-separated-strips-v1.1.3.tgz
  4. Do not use Import offline module bundle
  5. Open Surfaces
  6. Add or edit the Loupedeck surface integration
  7. Select module version 1.1.3
  8. Set LCD strip mode to Split buttons
  9. 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

Choose a tag to compare

@ninoleto ninoleto released this 15 Jul 15:35

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.

Loupedeck v1.1.2 module with separated 60x60 strip buttons

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-0
  • strip-left-1
  • strip-left-2
  • strip-right-0
  • strip-right-1
  • strip-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:

  1. Open the Modules page.
  2. Click Import module package.
  3. Select companion-surface-loupedeck-separated-strips-v1.1.2.tgz.
  4. 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:

  1. Click Add Surface Integration.
  2. Click All Available if it is not already selected.
  3. Search for Loupedeck.
  4. Select the Loupedeck surface integration.
  5. Select module version 1.1.2 if Companion asks which installed version to use.
  6. 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:

  1. Completely stop Companion.
  2. Start Companion again.
  3. Open the Modules page and confirm that version 1.1.2 is installed.
  4. Open the Surfaces page and confirm that the Loupedeck integration uses version 1.1.2.
  5. Click Rescan USB.

Updating from an older version

  1. Download companion-surface-loupedeck-separated-strips-v1.1.2.tgz.
  2. Open Companion’s Modules page.
  3. Click Import module package.
  4. Select the new package.
  5. Confirm the import.
  6. Open the Surfaces page.
  7. Open the Loupedeck surface integration.
  8. Select module version 1.1.2.
  9. Restart Companion if necessary.
  10. 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...
Read more

Bitfocus Companion 5.0 Split Touch Strips for Loupedeck Live / Razer Stream Controller – v1.1.0

Choose a tag to compare

@ninoleto ninoleto released this 14 Jul 01:00

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 and Razer Stream Controller with six split touch-strip controls in Bitfocus Companion 5

Loupedeck Live / Razer Stream Controller using six independent split touch-strip controls

Bitfocus Companion 5 button configuration for Loupedeck split touch strips

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:

  1. Open the Modules page.
  2. Click Import module package.
  3. Select:
companion-surface-loupedeck-split-strips-v1.1.0.tgz
  1. 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:

  1. Click Add Surface Integration.
  2. Click All Available if it is not already selected.
  3. Search for Loupedeck.
  4. Select the Loupedeck surface integration.
  5. Select module version 1.1.0 if Companion asks which installed version to use.
  6. 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:

  1. Completely stop Companion.
  2. Start Companion again.
  3. Open the Modules page and confirm that version 1.1.0 is installed.
  4. Open the Surfaces page and confirm that the Loupedeck integration uses version 1.1.0.
  5. 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 .tgz package
  • 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:

  1. Disconnect the controller.
  2. Reconnect the controller.
  3. 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...
Read more

v1.0.2-nino - Split strip bitmap controls

Choose a tag to compare

@ninoleto ninoleto released this 19 Jun 19:56

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-0
  • strip-left-1
  • strip-left-2
  • strip-right-0
  • strip-right-1
  • strip-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