Skip to main content

General Device Type Format (GDTF) library for Python

Project description

python-gdtf

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.

Credits

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.

Source code

PyPi page

Pytest

Check links in markdown

Installation

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

Usage

# import
import pygdtf

# parse a GDTF file
gdtf_fixture = pygdtf.FixtureType("BlenderDMX@LED_PAR_64_RGBW@v0.3.gdtf")

# 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 for a DMX Mode named "Default"
pygdtf.utils.get_dmx_channels(gdtf_fixture, "Default")

[
    [
        {'dmx': 1, 'id': 'Dimmer', 'offset': [
                1
            ], 'default': 0, 'highlight': 255, 'geometry': 'Beam', 'break': 1, 'channel_functions': [
                {'name': 'Dimmer', 'attribute': 'Dimmer', 'real_fade': 0.0, 'physical_to': 1.0, 'physical_from': 0.0, 'channel_sets': ['Closed', '', 'Open'
                    ]
                }
            ]
        },
        {'dmx': 2, 'id': 'ColorAdd_R', 'offset': [
                2
            ], 'default': 0, 'highlight': 255, 'geometry': 'Beam', 'break': 1, 'channel_functions': [
                {'name': 'ColorAdd_R', 'attribute': 'ColorAdd_R', 'real_fade': 0.0, 'physical_to': 1.0, 'physical_from': 0.0, 'channel_sets': ['Min', '', 'Max'
                    ]
                }
            ]
        },
        {'dmx': 3, 'id': 'ColorAdd_G', 'offset': [
                3
            ], 'default': 0, 'highlight': 255, 'geometry': 'Beam', 'break': 1, 'channel_functions': [
                {'name': 'ColorAdd_G', 'attribute': 'ColorAdd_G', 'real_fade': 0.0, 'physical_to': 1.0, 'physical_from': 0.0, 'channel_sets': ['Min', '', 'Max'
                    ]
                }
            ]
        },
        {'dmx': 4, 'id': 'ColorAdd_B', 'offset': [
                4
            ], 'default': 0, 'highlight': 255, 'geometry': 'Beam', 'break': 1, 'channel_functions': [
                {'name': 'ColorAdd_B', 'attribute': 'ColorAdd_B', 'real_fade': 0.0, 'physical_to': 1.0, 'physical_from': 0.0, 'channel_sets': ['Min', '', 'Max'
                    ]
                }
            ]
        },
        {'dmx': 5, 'id': 'ColorAdd_W', 'offset': [
                5
            ], 'default': 0, 'highlight': None, 'geometry': 'Beam', 'break': 1, 'channel_functions': [
                {'name': 'ColorAdd_W', 'attribute': 'ColorAdd_W', 'real_fade': 0.0, 'physical_to': 1.0, 'physical_from': 0.0, 'channel_sets': ['Min', '', 'Max'
                    ]
                }
            ]
        }
    ]
]

#you can get the full info with channels and with channel functions at once:
pygdtf.utils.get_dmx_modes_info(gdtf_fixture, include_channels=True, include_channel_functions=True)

See BlenderDMX and tests for reference implementation and usage examples.

Usage principles

  • 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

Status

  • Many GDTF 1.2 features have been implemented
  • Some GDTF 1.1 features have been kept in

Development

PRs appreciated. You can use uv to get the project setup by running:

uv sync

Typing

  • We try to type the main library as well as the utils module, to test run:
mypy pygdtf/**py  --pretty

Format

Testing

  • to test, run: pytest
  • to test typing with mypy run pytest:
pytest --mypy -m mypy pygdtf/**py

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pygdtf-1.0.5-py3-none-any.whl (18.8 kB view details)

Uploaded Python 3

File details

Details for the file pygdtf-1.0.5-py3-none-any.whl.

File metadata

  • Download URL: pygdtf-1.0.5-py3-none-any.whl
  • Upload date:
  • Size: 18.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.5.24

File hashes

Hashes for pygdtf-1.0.5-py3-none-any.whl
Algorithm Hash digest
SHA256 3a1c152e44e8a7481271b1eb74fbf7a95659340a739dd64285b28fcfbf5ec35c
MD5 7361fc8b8a8aee22cafb7e1d011e7da7
BLAKE2b-256 2330d80f202d7b2c477cf98488c177aa6a2ac8255b24e9ad4bd609d04e9a2a57

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page