Async Python client for madVR Envy IP Control.
Project description
madVR Envy Python Library
Spec-first async Python client for madVR Envy IP Control.
This project intentionally does not inherit implementation patterns from existing community libraries. It is being built from the official Envy IP Control specification and protocol captures.
Current API Shape
- Typed command helpers in
madvr_envy.commands - High-level async client in
madvr_envy.client.MadvrEnvyClient - Typed protocol parser in
madvr_envy.protocol
Example:
import asyncio
from madvr_envy.client import MadvrEnvyClient
async def main() -> None:
client = MadvrEnvyClient(host="192.168.1.100")
await client.start()
await client.wait_synced(timeout=10)
await client.get_mac_address(wait_for_ack=True)
await client.display_message(3, "Hello from py-madvr-envy")
await client.change_option("temporary\\hdrNits", 120)
groups = await client.enum_profile_groups_collect()
for group in groups:
print(group.group_id, group.name)
await client.stop()
asyncio.run(main())
Protocol Basis
- Source:
https://madvrenvy.com/wp-content/uploads/EnvyIpControl.pdf - Document title:
madVR Envy IP Control revision 1.1.3 - Retrieved: 2026-02-27
- HTTP metadata observed during retrieval:
Last-Modified: Mon, 20 May 2024 02:40:13 GMT
Development
uv sync --group dev
uv run ruff check .
uv run ruff format --check .
uv run ty check madvr_envy
uv run pytest -v
Protocol Coverage
See docs/PROTOCOL_COVERAGE.md for implemented command and notification coverage.
Enumeration Collectors
For stream enumerations, use typed collectors:
enum_profile_groups_collect()enum_profiles_collect(profile_group)enum_setting_pages_collect()enum_config_pages_collect()enum_options_collect(page_or_path)
These helpers wait for protocol end markers and raise EnumerationTimeoutError if an end marker is not observed in time.
HA Adapter
Use madvr_envy.adapter.EnvyStateAdapter to convert mutable runtime state into immutable snapshots plus typed deltas/events:
snapshot: stable full-state view for coordinator datadeltas: field-level changes since previous snapshotevents: integration-friendly event stream (temporary resets, display changes, settings store/restore, etc.)
You can wire this directly through the client:
from madvr_envy.adapter import EnvyStateAdapter
adapter = EnvyStateAdapter()
def on_update(snapshot, deltas, events):
...
handle = client.register_adapter_callback(adapter, on_update)
# later: client.deregister_adapter_callback(handle)
For Home Assistant coordinator/event-bus integration, use madvr_envy.ha_bridge:
coordinator_payload(snapshot)to_ha_events(events)build_bridge_update(snapshot, deltas, events)
Reference coordinator wiring: docs/ha_coordinator_example.py.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file madvr_envy-0.1.4.tar.gz.
File metadata
- Download URL: madvr_envy-0.1.4.tar.gz
- Upload date:
- Size: 35.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f1a7f9b157e9927d5dc976364416998eec23a916f36873e5d558ba7efb184259
|
|
| MD5 |
1060502cd034d272425b2e09bfa34c5d
|
|
| BLAKE2b-256 |
17c8b85fa9950e37f055db415fef076b44f358fc011be387bab1acf6fbaeaa85
|
Provenance
The following attestation bundles were made for madvr_envy-0.1.4.tar.gz:
Publisher:
release.yml on binarylogic/py-madvr-envy
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
madvr_envy-0.1.4.tar.gz -
Subject digest:
f1a7f9b157e9927d5dc976364416998eec23a916f36873e5d558ba7efb184259 - Sigstore transparency entry: 1004269633
- Sigstore integration time:
-
Permalink:
binarylogic/py-madvr-envy@ca39293f4b03a78bda40d83b1bd3b386c74eb664 -
Branch / Tag:
refs/tags/v0.1.4 - Owner: https://github.com/binarylogic
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@ca39293f4b03a78bda40d83b1bd3b386c74eb664 -
Trigger Event:
push
-
Statement type:
File details
Details for the file madvr_envy-0.1.4-py3-none-any.whl.
File metadata
- Download URL: madvr_envy-0.1.4-py3-none-any.whl
- Upload date:
- Size: 20.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a75826678f6bdabeb11da84a95736301e137a2c6b47ce0d26d5ad6db1b480264
|
|
| MD5 |
f4f72493b03e294c721be7b5aa63bf56
|
|
| BLAKE2b-256 |
0e07b6118ae6d42ccc3609134ce7a3d11223d871df29447a29cd0f91c9a046d7
|
Provenance
The following attestation bundles were made for madvr_envy-0.1.4-py3-none-any.whl:
Publisher:
release.yml on binarylogic/py-madvr-envy
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
madvr_envy-0.1.4-py3-none-any.whl -
Subject digest:
a75826678f6bdabeb11da84a95736301e137a2c6b47ce0d26d5ad6db1b480264 - Sigstore transparency entry: 1004269636
- Sigstore integration time:
-
Permalink:
binarylogic/py-madvr-envy@ca39293f4b03a78bda40d83b1bd3b386c74eb664 -
Branch / Tag:
refs/tags/v0.1.4 - Owner: https://github.com/binarylogic
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@ca39293f4b03a78bda40d83b1bd3b386c74eb664 -
Trigger Event:
push
-
Statement type: