Python library for MVR (My Virtual Rig). MVR is part of GDTF (General Device Type Format)
MVR specification as per https://gdtf.eu/mvr/prologue/introduction/
See source code for documentation. Naming conventions, in general, are identical to that on the GDTF, CamelCase is replaced with underscore_delimiters.
pip install pymvr
To install latest version from git via pip:
python -m pip install https://codeload.github.com/open-stage/python-mvr/zip/refs/heads/master
import pymvr
mvr_scene = pymvr.GeneralSceneDescription("mvr_file.mvr")
for layer_index, layer in enumerate(mvr_scene.layers):
... #process data
fixtures_list = []
mvr = pymvr.GeneralSceneDescriptionWriter()
pymvr.UserData().to_xml(parent=mvr.xml_root)
scene = pymvr.SceneElement().to_xml(parent=mvr.xml_root)
layers = pymvr.LayersElement().to_xml(parent=scene)
layer = pymvr.Layer(name="Test layer").to_xml(parent=layers)
child_list = pymvr.ChildList().to_xml(parent=layer)
fixture = pymvr.Fixture(name="Test Fixture") # not really a valid fixture
child_list.append(fixture.to_xml())
fixtures_list.append((fixture.gdtf_spec, fixture.gdtf_spec))
pymvr.AUXData().to_xml(parent=scene)
mvr.files_list = list(set(fixtures_list))
mvr.write_mvr("example.mvr")
See BlenderDMX and tests for reference implementation.
-
Reading:
- Address
- Alignment
- AUXData
- ChildList
- Class
- Connection
- CustomCommand
- Data
- Fixture
- FocusPoint
- Geometries
- Geometry3D
- Gobo
- GroupObject
- Layer
- Mapping
- Overwrite
- Position
- Projector
- Protocol
- SceneObject
- Sources
- Support
- Symbol
- Symdef
- Truss
- UserData
- VideoScreen
-
Writing:
- Fixture
- Focus point
- creating MVR zip file
- At this point, the
--no-strict-optional
is needed for mypy tests to pass:
mypy pymvr/*py --pretty --no-strict-optional
- to format, use
ruff
- to test, use
pytest
- to test typing with mypy use:
pytest --mypy -m mypy pymvr/*py