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
Maintainers
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 installThis 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 fromdiscoverDevices()
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 testThis will:
- Discover available devices
- Initialize the first device found
- Test all zoom control functions
- Verify zoom capabilities
- 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-rulesBuild 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
IAMCameraControlinterface - 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
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests for new functionality
- Ensure all tests pass
- 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
