pyvmancer
Python library and CLI to automate the LZX Industries Videomancer over USB.
Two control paths, usable together or independently:
| Path | Transport | Covers |
|---|---|---|
| USB MIDI | ALSA rawmidi or any mido backend |
12 parameters (7/14-bit CC), preset recall, note triggers, clock/transport |
| USB serial | /dev/ttyACM* or libusb |
programs, presets, modulation operators, video, settings, filesystem |
Install
pip install pyvmancer # MIDI only
pip install "pyvmancer[all]" # adds serial and libusb transports
On Linux the python-rtmidi dependency links libasound.so.2:
sudo apt-get install libasound2t64
Use
import pyvmancer as vm
d = vm.Videomancer.open()
d.load_program("Isotherm")
d.set_named("Posterize", 5) # native units: Posterize is 0..7
d.set_named("Mix", 80) # Mix is 0..100
d.set_source("Contrast", "free lfo")
d.set_param(1, 0.75) # or address slots directly, 0.0..1.0
d.set_param(7, True) # toggles take bools
d.trigger(4) # note-trigger a modulation operator
d.set_bpm(128)
d.play()
d.close()
Device knowledge the library encodes, rather than leaving to each caller:
d.park() # manual values to a reference, so a CC is absolute
p = d.parameter("Posterize") # p.role, p.steps, p.sample_values()
d.program_manifest().get("combing").description
d.file_hash("sd:/programs/lzx/combing.vmprog")
d.video_state().source_locked # per-input lock, not the genlock flag
d.resync() # bounce the timing to re-init the output raster
MIDI only, no serial link needed:
with vm.open_midi(channel=1) as m:
m.set_param(1, 0.5)
m.select_preset(3)
m.run_clock(120, beats=8)
CLI
vmancer devices # discover attached units and their device nodes
vmancer operators # list the 25 modulation operators
vmancer set 1=0.5 7=on # set parameters over MIDI
vmancer preset 3 # recall a preset
vmancer programs # list installed FPGA programs
vmancer load Isotherm # load a program
vmancer manifest # SD program library metadata
vmancer hash sd:/programs/x.vmprog
vmancer resync # recover an output that stopped passing frames
vmancer shell modulation status # run any raw shell command
Permissions
MIDI needs read/write on /dev/snd/midiC*D* (usually granted by a desktop ACL);
serial needs the dialout group or an ACL on /dev/ttyACM*. See
docs/permissions.md.
Docs
- docs/protocol.md — MIDI implementation and the serial command set
- docs/permissions.md — device node access, containers, udev
- docs/firmware-notes.md — observed firmware behaviour and quirks
- CHANGELOG.md — release history
Status
Verified against a Videomancer running firmware 1.0.0-rc.37 and 1.0.0-rc.40.
Not affiliated with LZX Industries.
License
Apache-2.0
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 pyvmancer-0.2.0.tar.gz.
File metadata
- Download URL: pyvmancer-0.2.0.tar.gz
- Upload date:
- Size: 74.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
945e4eb09e08f63a313e563cc04badc809e89f8e1673bdcf6da0fe285616d40b
|
|
| MD5 |
dc512330891e7acb3950ac0ae6a807d0
|
|
| BLAKE2b-256 |
1d9634a255caf29d23710aff3c8493c02569f8791dea25eaa90154108ad65673
|
Provenance
The following attestation bundles were made for pyvmancer-0.2.0.tar.gz:
Publisher:
release.yml on anarkiwi/pyvmancer
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pyvmancer-0.2.0.tar.gz -
Subject digest:
945e4eb09e08f63a313e563cc04badc809e89f8e1673bdcf6da0fe285616d40b - Sigstore transparency entry: 2315108698
- Sigstore integration time:
-
Permalink:
anarkiwi/pyvmancer@1947b7ce1dbd787aa0cd8f62b70e1975e82725f6 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/anarkiwi
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@1947b7ce1dbd787aa0cd8f62b70e1975e82725f6 -
Trigger Event:
release
-
Statement type:
File details
Details for the file pyvmancer-0.2.0-py3-none-any.whl.
File metadata
- Download URL: pyvmancer-0.2.0-py3-none-any.whl
- Upload date:
- Size: 40.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3b8569c09bf17c2635c081c491886c820e5c3ac39364712f24485fe029ec3b91
|
|
| MD5 |
a1c053fb36e5644dbba31757f2dab36c
|
|
| BLAKE2b-256 |
9a6716124b1c3cee6510f4109e4c2db903932e8c3e4490dfe79116f58e038390
|
Provenance
The following attestation bundles were made for pyvmancer-0.2.0-py3-none-any.whl:
Publisher:
release.yml on anarkiwi/pyvmancer
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pyvmancer-0.2.0-py3-none-any.whl -
Subject digest:
3b8569c09bf17c2635c081c491886c820e5c3ac39364712f24485fe029ec3b91 - Sigstore transparency entry: 2315108769
- Sigstore integration time:
-
Permalink:
anarkiwi/pyvmancer@1947b7ce1dbd787aa0cd8f62b70e1975e82725f6 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/anarkiwi
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@1947b7ce1dbd787aa0cd8f62b70e1975e82725f6 -
Trigger Event:
release
-
Statement type: