MX Remote - Python Client for Pulse-Eight MatrixOS devices
Python 3 library for discovering and controlling Pulse-Eight AV distribution hardware over a local network: video/audio matrices, HDMI-over-IP encoders/decoders, multiviewers, and audio amplifiers. Supports device discovery, video/audio routing, volume control, remote-control key passthrough, HDMI-over-IP streaming, multiviewer control, and more.
If you are looking to integrate Pulse-Eight neo, OneIP, or ProAmp8 devices into your own software or home-automation system, this is the library for it.
Documentation: opdenkamp.github.io/mx-remote
What is MX Remote?
MX Remote is the network protocol these Pulse-Eight devices use to discover and control one another over UDP (multicast or broadcast). All of them run the shared MatrixOS firmware, which speaks this protocol natively. This library is a client implementation of that protocol — its purpose is to expose the devices to third-party software.
Supported devices
All devices below run MatrixOS and are controlled through the same protocol:
- Pulse-Eight neo — HDBaseT video/audio matrices (neo:4, neo:8, neo:X, and splitters)
- Pulse-Eight OneIP — HDMI-over-IP units: Transmitter (TX), Receiver (RX), Transceiver (TZ), and Multiviewer
- Pulse-Eight ProAmp8 — 8-zone audio amplifier with Dolby support
Requirements
- Python 3.11 or later
- Network access to one or more of the Pulse-Eight devices above (multicast or broadcast)
Installation
pip install .
Quick Start
The minimum code to discover devices on the network:
import asyncio
import mx_remote
async def main():
mx = mx_remote.Remote()
await mx.start_async()
# wait for devices to be discovered
await asyncio.sleep(5)
for uid, device in mx.remotes.items():
print(f"{device.serial} ({device.name}) - {device.model_name} - {device.status}")
for port, bay in device.bays.items():
print(f" {bay.bay_label} [{bay.mode}] signal={bay.signal_detected}")
await mx.close()
asyncio.run(main())
Documentation
The guides below are published at opdenkamp.github.io/mx-remote alongside an API reference generated from the docstrings, and are readable here in docs/.
| Page | Covers |
|---|---|
| Configuration | Opening a connection and keeping it in step with the mesh. |
| Devices and bays | Naming, hiding, EDID and the device registry. |
| Routing | Selecting video and audio sources for an output. |
| Callbacks | Reacting to state changes rather than polling for them. |
| Audio | Volume, mute and remote-control passthrough. |
| OneIP and V2IP | Streaming endpoints, stream sources and statistics. |
| Multiviewer | Layout, sources and output configuration. |
| Diagnostics | Network status, the mxr console app and capture replay. |
Other languages
The same protocol, implemented independently:
- Go — https://github.com/opdenkamp/mx-remote-golang
- Rust — https://github.com/opdenkamp/mx-remote-rust (also ships a C ABI, for C and C++)
Python is the oldest of the three and the one that still decodes what older
firmware sent: 0x06, 0x36 and 0x47 are superseded opcodes kept because a
unit on older firmware still emits them. So it decodes a slightly wider set than
the others, and the difference is deliberate rather than drift.
License
BSD 3-Clause License. See LICENSE for details.
Metadata
Release files for mx-remote 5.9.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| mx_remote-5.9.1.tar.gz | 239.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| mx_remote-5.9.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 477.0 kB
Release files / mx_remote-5.9.1.tar.gz
| Download URL | mx_remote-5.9.1.tar.gz |
|---|---|
| Size | 239.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
c1a542ce3dbb47b7f598fc224720d7d7de0d6963b35f0146e36ed332d4192abe
|
|
BLAKE2b-256 checksum How to use checksums |
1a6028ab59eb2d6a66bad88b3261d1dc6640efeee38908b01a256d230ded7cad
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 14, 2026.
Transparency logRelease files / mx_remote-5.9.1-py3-none-any.whl
| Download URL | mx_remote-5.9.1-py3-none-any.whl |
|---|---|
| Size | 237.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
1e712cc65c9b538a63402b40f4908dd44f57a652f4bf49d67d502fc6b4110358
|
|
BLAKE2b-256 checksum How to use checksums |
a05f61001fc44a9ed1f362057f64e62e928781fbc30110dc5364b1c7fe6a38eb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 14, 2026.
Transparency log