Skip to main content

ClairMeta is a python package for Digital Cinema Package (DCP) probing and checking.

Project description

Build Status PyPI version Code coverage

ClairMeta

ClairMeta is a python package for Digital Cinema Package (DCP) probing and checking.

Features

  • DCP Probe:
    • Metadata extraction of the whole DCP, including all XML fields and MXF assets inspection.

  • DCP Checker:
    • SMPTE / Interop standard convention

    • Integrity (MIME type, size, hash) of all assets

    • Foreign file identification

    • XSD Schema validation for XML files (VOLINDEX, ASSETMAP, CPL, PKL)

    • Digital signature validation (CPL, PKL)

    • Intra / Inter Reels integrity and coherence

    • Metadata match between CPL assets and MXF headers

    • Re-link VF / OV

    • Picture tests : FrameRate, BitRate

    • Sound tests : Channels, Sampling

    • Subtitle : Deep inspection of Interop and SMPTE subtitles

  • DSM / DCDM Checker:
    • Basic image file sequence validation with some specific rules.

Installation

Requirements:

  • Python: 3.8 or later

  • Platform: Windows (with limitations), macOS, Linux

  • External (non-python) dependencies:
    • asdcplib

    • mediainfo (opt)

    • sox (opt)

Install from PyPI package (this does not install external dependencies):

pip install clairmeta

If you need help installing the external dependencies, you can have a look at our continuous integration system, specifically the .github folder.

Usage

General

As a command line tool:

# Probing
python3 -m clairmeta.cli probe -type dcp path/to/dcp
python3 -m clairmeta.cli probe -type dcp path/to/dcp -format json > dcp.json
python3 -m clairmeta.cli probe -type dcp path/to/dcp -format xml > dcp.xml

# Checking
python3 -m clairmeta.cli check -type dcp path/to/dcp
python3 -m clairmeta.cli check -type dcp path/to/dcp -format json > check.json
python3 -m clairmeta.cli check -type dcp path/to/dcp -format xml > check.xml
python3 -m clairmeta.cli check -type dcp path/to/dcp -kdm /path/to/kdm -key /path/to/privatekey
python3 -m clairmeta.cli check -type dcp path/to/dcp -progress
python3 -m clairmeta.cli check -type dcp path/to/dcp_vf -ov path/to/dcp_ov

As a python library:

from clairmeta import DCP

dcp = DCP("path/to/dcp")
dcp.parse()
status, report = dcp.check()
# Check DCP VF against OV
status, report = dcp.check(ov_path="/path/to/dcp_ov")
# DCP check with console progression report
from clairmeta.utils.file import ConsoleProgress

status, report = dcp.check(hash_callback=ConsoleProgress())
# Alternatives
# - function matching utils.file.ConsoleProgress.__call__ signature
# - derived class from utils.file.ConsoleProgress

Profiles

Check profile allow custom configuration of the DCP check process such as bypassing some unwanted tests or error level specification. To implement a check profile, simply write a JSON file derived from this template (actual content listed below is for demonstration purposes only):

  • criticality key allow custom criteria level specification, check name can be incomplete to quickly ignore a bunch of tests, default is used if no other match where found.

  • bypass key allow specific test bypass, incomplete names are not allowed.

  • allowed_foreign_files key specify files that are allowed in the DCP folder and should not trigger the foreign file check.

{
    "criticality": {
        "default": "ERROR",
        "check_dcnc_": "WARNING",
        "check_cpl_reel_duration_picture_subtitles": "WARNING",
        "check_picture_cpl_avg_bitrate": "WARNING",
        "check_picture_cpl_resolution": "WARNING"
    },
    "bypass": ["check_assets_pkl_hash"],
    "allowed_foreign_files": ["md5.md5"]
}

Custom profile check:

python3 -m clairmeta.cli check -type dcp path/to/dcp -profile path/to/profile.json
from clairmeta import DCP
from clairmeta.profile import load_profile

dcp = DCP("path/to/dcp")
profile = load_profile("/path/to/profile.json")
status, report = dcp.check(profile=profile)

Logging

Logging is customizable, see the settings.py file or below. By default ClairMeta logs to stdout and a rotated log file.

'level': 'INFO'  # Minimum log level
'enable_console': True  # Enable / Disable stdout logging
'enable_file': True  # Enable / Disable file logging
'file_name': '/log/path/clairmeta.log'  # Log file absolute path
'file_size': 1e6  # Individual log file maximum size
'file_count': 10  # Number of files to rotate on

Contributing

  • To setup your environment follow these steps:

git clone https://github.com/Ymagis/ClairMeta.git
cd clairmeta
git clone https://github.com/Ymagis/ClairMeta_Data tests/resources

uv sync --all-extras --dev

# Code...

uv run ruff check
uv run black .
uv run pytest --doctest-modules
  • Open a Pull Request

  • Open an Issue

Changes

The release changes are available on Github: https://github.com/Ymagis/ClairMeta/releases

References

The following sources / software were used:

About

http://www.ymagis.com/

Project details


Download files

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

Source Distribution

clairmeta-1.6.2.tar.gz (102.3 kB view details)

Uploaded Source

Built Distribution

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

clairmeta-1.6.2-py3-none-any.whl (122.1 kB view details)

Uploaded Python 3

File details

Details for the file clairmeta-1.6.2.tar.gz.

File metadata

  • Download URL: clairmeta-1.6.2.tar.gz
  • Upload date:
  • Size: 102.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for clairmeta-1.6.2.tar.gz
Algorithm Hash digest
SHA256 17ca15524a39ee3200812066d69de43a88389ec6a2b7b18c4c4dad5537f2a33b
MD5 82ce7dd0191c0e01041222533057e987
BLAKE2b-256 68f0d455f0a62284f17a2048ce1c9c66a02adfd88b14db79a6d5104b0423362c

See more details on using hashes here.

Provenance

The following attestation bundles were made for clairmeta-1.6.2.tar.gz:

Publisher: publish-to-pypi.yml on ClairMeta/ClairMeta

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file clairmeta-1.6.2-py3-none-any.whl.

File metadata

  • Download URL: clairmeta-1.6.2-py3-none-any.whl
  • Upload date:
  • Size: 122.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for clairmeta-1.6.2-py3-none-any.whl
Algorithm Hash digest
SHA256 c96efc5627ea0117f97095a85b781e28352e8f02ce4f50761d01747a7e348531
MD5 2588c4e1533c652feb691a7e962b21b1
BLAKE2b-256 e4b6441357b573bbeb4323aafd1d22d48184f16b0d6bbda068baa56b16425123

See more details on using hashes here.

Provenance

The following attestation bundles were made for clairmeta-1.6.2-py3-none-any.whl:

Publisher: publish-to-pypi.yml on ClairMeta/ClairMeta

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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