Python library for General Device Type Format
GDTF specification as per https://gdtf.eu/gdtf/prologue/introduction/
See source code for documentation. Naming conventions, in general, are identical to that on the GDTF, CamelCase is replaced with underscore_delimiters.
Originally created by Jack Page. Friendly forked to Open-Stage by vanous. We continue publishing to pypi under the same pygdtf name with Jack's permission.
Used for example by BlenderDMX.
pip install pygdtf
To install latest version from this git repository, run pip:
python -m pip install https://codeload.github.com/open-stage/python-gdtf/zip/refs/heads/master
# import
import pygdtf
# parse a GDTF file
gdtf_fixture = pygdtf.FixtureType("BlenderDMX@[email protected]")
# one can also parse just a description.xml file during development or testing
gdtf_fixture = pygdtf.FixtureType(dsc_file="description.xml")
# get info about DMX Modes:
pygdtf.utils.get_dmx_modes_info(gdtf_fixture)
[{'mode_id': 0,
'mode_name': 'Default',
'mode_dmx_channel_count': 5,
'mode_virtual_channel_count': 0}]
# get list of DMX channels with geometries, channels functions
pygdtf.utils.get_dmx_channels(gdtf_fixture, "Default")
[[{'dmx': 1,
'id': 'Dimmer',
'default': 0,
'geometry': 'Beam',
'break': 1,
'channel_functions': [<pygdtf.ChannelFunction at 0x7f122435c8b0>]}]
#you can get the full info with chanells and with channel functions at once:
pygdtf.utils.get_dmx_modes_info(f, include_channels=True, include_channel_functions=True)
See BlenderDMX and tests for reference implementation and usage examples.
-
for list of channels, use
pygdtf.utils.get_dmx_channels
as per example above, do not presume that plain layout of DMX Channels in a DMX Mode is defining the DMX footprint of the device. Geometry references are (frequently) used to re-use parts of the device. This means that a channel(s) defined once can be multiplied, over several times duplicated geometry (tree). -
do not use geometry names for anything related to function of the geometry (yoke, pan, tilt, head), use attached GDTF attributes ("Pan", "Tilt") to know what functions should the geometry perform
- Many GDTF 1.2 features have been implemented
- Some GDTF 1.1 features have been kept in
PRs appreciated.
- We try to type the main library as well as the utils module, to test run:
mypy pygdtf/**py --pretty
- to test, run:
pytest
- to test typing with mypy run pytest:
pytest --mypy -m mypy pygdtf/**py