vudials_client
A Python client library for Streacom's VU1 Dial development hardware. Provides a simple, tested interface for controlling multiple dials and managing the VU1 server.
Features
- Full Dial API: Change a dial's value, backlight color, name, background image, and easing parameters
- Full Admin API: VU1 Dial Server API key management and dial provisioning
- Type-annotated: All public methods carry full parameter and return-type annotations
- Well tested: Comprehensive test suite using
pytestandresponses— no live hardware required - CI tested: Every supported Python version (3.11+) is exercised in GitHub Actions
Installation
pip install vudials-client
For development:
git clone git@github.com:erinlkolp/vu-dials-module.git
cd vu-dials-module
pip install -e ".[dev]"
Quick Start
import os
from vudials_client import vudialsclient
server_address = os.environ["VU1_SERVER_ADDRESS"]
server_port = int(os.environ["VU1_SERVER_PORT"])
server_key = os.environ["API_KEY"]
admin_key = os.environ["ADMIN_API_KEY"]
vu_meter = vudialsclient.VUDial(server_address, server_port, server_key)
admin_api = vudialsclient.VUAdmin(server_address, server_port, admin_key)
# List connected dials
dial_list = vu_meter.list_dials()
print(dial_list.json())
# Set first dial to 75% with a blue backlight
uid = dial_list.json()[0]["uid"]
vu_meter.set_dial_value(uid, 75)
vu_meter.set_dial_color(uid, 0, 0, 100)
# List API keys
api_key_list = admin_api.list_api_keys()
print(api_key_list.json())
Note: The VU1 server communicates over plain HTTP on your local network. Keep the server on a trusted interface and treat the API keys as secrets. Both keys are passed as URL query parameters and will appear in server access logs.
API Reference
VUDial
Controls dial hardware. All methods return a requests.Response; HTTP 4xx/5xx errors raise requests.exceptions.HTTPError.
vu_meter = vudialsclient.VUDial(server_address, server_port, api_key)
| Parameter | Type | Description |
|---|---|---|
server_address |
str |
VU1 server hostname or IP (e.g. "localhost") |
server_port |
int |
VU1 server port (e.g. 5340) |
api_key |
str |
A valid API key for the VU1 server |
Methods:
| Method | Description |
|---|---|
list_dials() |
List all connected dials |
get_dial_info(uid) |
Get status/info for a specific dial |
set_dial_value(uid, value) |
Set the dial position (0–100) |
set_dial_color(uid, red, green, blue) |
Set the backlight color (0–100 each channel) |
set_dial_background(uid, file) |
Upload a background image file |
get_dial_image_crc(uid) |
Get the CRC of the current background image |
set_dial_name(uid, name) |
Assign a name to a dial |
reload_hw_info(uid) |
Reload hardware information for a dial |
set_dial_easing(uid, period, step) |
Configure dial movement easing |
set_backlight_easing(uid, period, step) |
Configure backlight easing |
get_easing_config(uid) |
Retrieve current easing configuration |
VUAdmin
Manages the VU1 server. All methods return a requests.Response; HTTP 4xx/5xx errors raise requests.exceptions.HTTPError.
admin_api = vudialsclient.VUAdmin(server_address, server_port, admin_key)
| Parameter | Type | Description |
|---|---|---|
server_address |
str |
VU1 server hostname or IP |
server_port |
int |
VU1 server port |
admin_key |
str |
A valid Admin API key for the VU1 server |
Methods:
| Method | Description |
|---|---|
provision_dials() |
Provision newly connected dial hardware |
list_api_keys() |
List all configured API keys |
create_api_key(name, dials) |
Create a new API key; the generated key is in the response |
update_api_key(name, target_key, dials) |
Update an existing API key |
remove_api_key(target_key) |
Remove an API key |
Testing
The test suite uses responses to mock all HTTP calls — no VU1 hardware or running server is required.
# Run all tests with coverage report
pytest tests/ -v --cov=vudials_client --cov-report=term-missing
# Run a specific test class
pytest tests/test_vudialsclient.py::TestVUDialSetDialColor -v
CI runs automatically on every push and pull request via GitHub Actions, across the full supported Python range (3.11+).
Documentation
Full API documentation can be regenerated from docstrings:
pip install pydoc-markdown
pydoc-markdown
This writes docs/api.md using the configuration in pydoc-markdown.yml.
Contributing
Contributions are welcome! Please open a pull request.
- Fork the repository
- Create a feature branch (
git checkout -b feature/my-feature) - Make your changes and add tests for any new or modified behaviour
- Ensure the test suite passes:
pytest tests/ -v - Open a pull request against
main
Please follow the existing code style: type-annotate all public methods, URL-encode user-supplied path segments with quote(value, safe=""), and keep library code free of logging.basicConfig() calls.
License
MIT — see LICENSE.
Author
Erin L. Kolp (erinlkolpfoss@gmail.com)
Many thanks to Aaron D. and Christopher K.!
Metadata
Release files for vudials-client 2026.8.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| vudials_client-2026.8.2.tar.gz | 15.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| vudials_client-2026.8.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 21.9 kB
Release files / vudials_client-2026.8.2.tar.gz
| Download URL | vudials_client-2026.8.2.tar.gz |
|---|---|
| Size | 15.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
9947f2b7f518534b036e65cd4f3d2f2de687ffb2029cfbaed329732af437ddcf
|
|
BLAKE2b-256 checksum How to use checksums |
050de74635c0490fb9e01f8aa95fb84e04adcc3c662c51abdcdc189d038bc9d0
|
| 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 Aug 7, 2026.
Transparency logRelease files / vudials_client-2026.8.2-py3-none-any.whl
| Download URL | vudials_client-2026.8.2-py3-none-any.whl |
|---|---|
| Size | 6.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
7421fcfcac1e7c135e38ed218ff30097bf2c8c2d1232f7c6f07a872c6f0c6757
|
|
BLAKE2b-256 checksum How to use checksums |
7171fa3cf0651ce9534be11bd809f1a883f2ce1f8adad06fdbc91191faaf77a1
|
| 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 Aug 7, 2026.
Transparency log