Skip to main content

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

pip3 install poetry
poetry install
poetry shell

# Code... and tests
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/

Metadata

Release files for clairmeta 1.5.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for clairmeta 1.5.2
File Size Uploaded
clairmeta-1.5.2.tar.gz 93.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for clairmeta 1.5.2
File Interpreter ABI Platform
clairmeta-1.5.2-py3-none-any.whl Python 3 none any Details

Total release size: 214.6 kB

Release files / clairmeta-1.5.2.tar.gz

Download URL clairmeta-1.5.2.tar.gz
Size 93.0 kB
Tags Source
SHA-256 checksum
How to use checksums
601ac0b06a5575963a5c8d4c8c6b879a385f76061fe4c3a316c5d1ee36b73dde
BLAKE2b-256 checksum
How to use checksums
612232a6ed6143025c6f9b30a510186c5d2aab75a4f9f67a7a2a1872d0feb3d5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.11.7

Release files / clairmeta-1.5.2-py3-none-any.whl

Download URL clairmeta-1.5.2-py3-none-any.whl
Size 121.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
65428e18da8e33a0b02ad2aa8b61254805eef599ebd40dfde271ced0c53abe4f
BLAKE2b-256 checksum
How to use checksums
a2f02ee9324651e271bb050ce7591fde74b7870650b9460531cc0e0eb9fc8458
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.11.7
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page