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:
asdcp-lib: http://www.cinecert.com/asdcplib/
mediainfo: https://mediaarea.net/
SMPTE Digital Cinema standards: https://www.smpte.org/
Interop Digital Cinema specifications: https://cinepedia.com/interop/
Digital Cinema Initiative specifications: http://www.dcimovies.com/specification/index.html
ISDCF Naming Convention: http://isdcf.com/dcnc/
Texas Instrument Digital Cinema Subtitles specifications
About
Metadata
Release files for clairmeta 1.6.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| clairmeta-1.6.2.tar.gz | 102.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| clairmeta-1.6.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 224.4 kB
Release files / clairmeta-1.6.2.tar.gz
| Download URL | clairmeta-1.6.2.tar.gz |
|---|---|
| Size | 102.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
17ca15524a39ee3200812066d69de43a88389ec6a2b7b18c4c4dad5537f2a33b
|
|
BLAKE2b-256 checksum How to use checksums |
68f0d455f0a62284f17a2048ce1c9c66a02adfd88b14db79a6d5104b0423362c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 14, 2026.
Transparency logRelease files / clairmeta-1.6.2-py3-none-any.whl
| Download URL | clairmeta-1.6.2-py3-none-any.whl |
|---|---|
| Size | 122.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
c96efc5627ea0117f97095a85b781e28352e8f02ce4f50761d01747a7e348531
|
|
BLAKE2b-256 checksum How to use checksums |
e4b6441357b573bbeb4323aafd1d22d48184f16b0d6bbda068baa56b16425123
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 14, 2026.
Transparency log