npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

logitech-brio-zoom-control

v1.0.0

Published

Cross-platform native library for controlling Logitech MX Brio camera zoom with 4K video support in Electron applications

Readme

Logitech MX Brio Zoom Control

A native C library for controlling Logitech MX Brio camera zoom functionality in Electron applications. This library provides cross-platform zoom control using platform-specific camera APIs:

  • Windows: DirectShow API
  • Linux: Video4Linux2 (V4L2) API
  • macOS: AVFoundation framework

Features

  • 🎥 Cross-platform support for Windows, Linux, and macOS
  • 🔍 Device discovery - Find all connected Logitech BRIO cameras
  • 📏 Zoom capabilities - Query min/max zoom levels and current settings
  • 🎛️ Absolute zoom control - Set specific zoom values
  • Relative zoom control - Zoom in/out by increments
  • 🔧 Easy integration with Electron applications
  • 📦 Native performance with C++ implementation

Supported Devices

  • Logitech MX Brio (4K)
  • Logitech BRIO (4K Ultra HD)
  • Other UVC-compatible Logitech cameras (may work with limited functionality)

Installation

npm install

This will automatically compile the native addon for your platform.

Prerequisites

Windows

  • Visual Studio Build Tools or Visual Studio with C++ workload
  • Windows SDK

Linux

  • Build essentials: sudo apt-get install build-essential
  • Video4Linux2 development headers: sudo apt-get install libv4l-dev
  • libudev development headers: sudo apt-get install libudev-dev

macOS

  • Xcode Command Line Tools: xcode-select --install

Usage

Basic Example

const LogitechBrioZoomControl = require('logitech-brio-zoom-control');

const control = new LogitechBrioZoomControl();

// Discover available devices
const devices = control.discoverDevices();
console.log('Found devices:', devices);

// Initialize the first device
if (devices.length > 0) {
    const success = control.initializeDevice(devices[0].id);
    if (success) {
        // Get zoom capabilities
        const caps = control.getZoomCapabilities();
        console.log('Zoom range:', caps.min, '-', caps.max);
        
        // Set zoom to 200
        control.setZoomAbsolute(200);
        
        // Zoom in by 10 units
        control.zoomIn(10);
        
        // Get current zoom value
        console.log('Current zoom:', control.getZoomValue());
        
        // Cleanup
        control.releaseDevice();
    }
}

Electron Integration

// In your Electron main process
const { ipcMain } = require('electron');
const LogitechBrioZoomControl = require('logitech-brio-zoom-control');

const control = new LogitechBrioZoomControl();

ipcMain.handle('camera:discover', () => {
    return control.discoverDevices();
});

ipcMain.handle('camera:initialize', (event, deviceId) => {
    return control.initializeDevice(deviceId);
});

ipcMain.handle('camera:zoom:set', (event, zoomValue) => {
    return control.setZoomAbsolute(zoomValue);
});

ipcMain.handle('camera:zoom:get', () => {
    return control.getZoomValue();
});

// In your renderer process
const { ipcRenderer } = require('electron');

// Discover cameras
const devices = await ipcRenderer.invoke('camera:discover');

// Initialize camera
await ipcRenderer.invoke('camera:initialize', devices[0].id);

// Control zoom
await ipcRenderer.invoke('camera:zoom:set', 300);
const currentZoom = await ipcRenderer.invoke('camera:zoom:get');

API Reference

Class: LogitechBrioZoomControl

Methods

discoverDevices()

Returns an array of available Logitech BRIO devices.

Returns: Array<Device>

[
  {
    name: "Logitech MX Brio",
    id: "device_id_string",
    vendorId: 0x046d,
    productId: 0x085e
  }
]
initializeDevice(deviceId)

Initialize a specific device for zoom control.

Parameters:

  • deviceId (string): Device ID from discoverDevices()

Returns: boolean - True if successful

initializeFirstDevice()

Initialize the first available device.

Returns: boolean - True if successful

releaseDevice()

Release the current device and cleanup resources.

getZoomCapabilities()

Get zoom capabilities of the current device.

Returns: Object

{
  min: 100,              // Minimum zoom value
  max: 500,              // Maximum zoom value  
  step: 1,               // Step size
  current: 100,          // Current zoom value
  supportsAbsolute: true, // Supports absolute zoom control
  supportsRelative: true  // Supports relative zoom control
}
setZoomAbsolute(zoomValue)

Set absolute zoom value.

Parameters:

  • zoomValue (number): Zoom value within device capabilities

Returns: boolean - True if successful

setZoomRelative(zoomDelta)

Adjust zoom by relative amount.

Parameters:

  • zoomDelta (number): Change in zoom (positive = zoom in, negative = zoom out)

Returns: boolean - True if successful

getZoomValue()

Get current zoom value.

Returns: number - Current zoom value

zoomIn(amount = 10)

Zoom in by specified amount.

Parameters:

  • amount (number): Amount to zoom in (default: 10)

Returns: boolean - True if successful

zoomOut(amount = 10)

Zoom out by specified amount.

Parameters:

  • amount (number): Amount to zoom out (default: 10)

Returns: boolean - True if successful

resetZoom()

Reset zoom to minimum value.

Returns: boolean - True if successful

maxZoom()

Set zoom to maximum value.

Returns: boolean - True if successful

Static Methods

LogitechBrioZoomControl.getInfo()

Get library information.

Returns: Object

{
  name: "logitech-brio-zoom-control",
  version: "1.0.0", 
  platform: "win32",
  arch: "x64",
  nodeVersion: "v16.14.0"
}

Testing

Run the test suite to verify functionality:

npm test

This will:

  1. Discover available devices
  2. Initialize the first device found
  3. Test all zoom control functions
  4. Verify zoom capabilities
  5. Perform cleanup

Troubleshooting

No devices found

  • Ensure your Logitech MX Brio is connected and recognized by the system
  • On Linux, check that your user has access to video devices: sudo usermod -a -G video $USER
  • Verify the camera works with other applications first

Permission errors (Linux)

# Add user to video group
sudo usermod -a -G video $USER

# Or create udev rule for the device
echo 'SUBSYSTEM=="video4linux", GROUP="video", MODE="0664"' | sudo tee /etc/udev/rules.d/99-video.rules
sudo udevadm control --reload-rules

Build errors

  • Ensure all prerequisites are installed for your platform
  • Try cleaning and rebuilding: npm run clean && npm run build
  • On Windows, ensure Visual Studio Build Tools are properly installed

Camera not responding

  • Close other applications that might be using the camera
  • Try reconnecting the camera
  • Restart the application

Platform-Specific Notes

Windows

  • Uses DirectShow IAMCameraControl interface
  • Requires camera drivers that support UVC controls
  • Some zoom controls may require manual camera control flags

Linux

  • Uses Video4Linux2 (V4L2) API
  • Zoom controls: V4L2_CID_ZOOM_ABSOLUTE, V4L2_CID_ZOOM_RELATIVE
  • Requires proper udev permissions for video devices

macOS

  • Uses AVFoundation AVCaptureDevice.videoZoomFactor
  • Zoom values are converted from factor (1.0-5.0) to integer (100-500)
  • Requires camera access permissions

Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Add tests for new functionality
  5. Ensure all tests pass
  6. Submit a pull request

License

MIT License - see LICENSE file for details.

Support

For issues and questions:

  • Check the troubleshooting section above
  • Review closed issues on GitHub
  • Create a new issue with detailed information about your setup and the problem

Changelog

v1.0.0

  • Initial release
  • Cross-platform zoom control support
  • Device discovery and initialization
  • Comprehensive test suite
  • Electron integration examples