Free & open source

Catch problems in your DCP or IMP
before it ships

DCP Doctor checks a cinema or streaming package for the mistakes that get a delivery rejected: broken structure, bad hashes, expired keys, subtitle timing, JPEG 2000 forensics, audio levels, HDR metadata and more. Run it in the browser, or install the desktop app for an additional thorough JPEG 2000 and MXF check.

DCP Doctor - validation report
# Checking a feature before delivery Package: MyFeature_FTR-1_S_EN_XX_51_2K_20241201 Standard: SMPTE (Bv2.1) Reels: 4 | Duration: 01:58:32 | Resolution: 2048x858 (Scope 2K) Audio: 5.1 (L R C LFE Ls Rs) | 48kHz/24bit Loudness: -28.3 LUFS | True Peak: -2.1 dBTP Color: CIE XYZ 12-bit | DCI-P3 Encryption: All assets encrypted (KDM required) ✓ PASS 0 errors, 1 warning ⚠ WARN Reel 3 is 42 minutes — exceeds 40-minute recommendation

$0

Free, open source (AGPL)

3

Windows, macOS, Linux

DCP & IMF

SMPTE, Interop, IMF

Browser

Nothing uploaded

Get the desktop app

The desktop app is the thorough check. It reads the JPEG 2000 essence frame by frame. Drop in a DCP or IMP folder and get a pass/fail report with every warning called out. Free and open source, all platforms.

💻

Windows

Installer (.msi) for Windows 10 and 11.

Download latest
🍎

macOS

Disk image (.dmg) for Apple Silicon Macs.

Download latest
🖥

Linux

AppImage or .deb for common distributions.

Download latest

Prefer the command line? The same releases page has a standalone command-line build for Windows, macOS and Linux, handy for scripting and watch folders. See Automation.

Check a DCP or IMP in your browser

dcpdoctor as WebAssembly, in your browser. Point it at a DCP or IMP folder. Nothing is uploaded. For a thorough JPEG 2000 pass, use the desktop app.

Or open the full-page checker for more room.

Every check your delivery needs

Grouped by the job in front of you, from a quick structure check to a full QC pass. Plain reports you can hand to a client or an operator.

Package integrity

📄

Structure and references

Checks that ASSETMAP, PKL and CPL line up and that every asset they point to is actually present. Catches duplicate asset IDs, a CPL whose title does not match its annotation, and a missing CompositionMetadataAsset.

Hashes and file sizes

Verifies the SHA-1 hash and size of every file, including the hash each CPL reel asset carries, so a corrupt or half-copied asset gets caught before it reaches a theater or a facility.

🔒

Signatures and certificates

Validates the XML signatures and the certificate chain, flags expired certs and malformed package XML, and catches an encrypted package that was left unsigned. Schema validation against the vendored SMPTE and Interop XSDs is on by default.

Picture, color and HDR

📐

Resolution and format

Confirms the 2K or 4K container, Flat / Scope / Full and aspect ratio, including the coded scope sizes (2048×858, 4096×1716). Flags a 4K track at an illegal frame rate. App 2E tracks are checked for an IMF JPEG 2000 profile, matching picture coding label, matching descriptor and codestream pixel depths, color primaries and transfer characteristic.

🎬

Bitrate limits

Per-frame picture bitrate with min, max and average, checked against the DCI cap of 250 Mbps at every resolution. IMF has no such cap, so an IMP's peak is reported as an info note.

🔍

JPEG 2000 forensics

One pass over every frame reports the track's codestream parameters (profile, tiles, TLM, POC, code-block size), the fattest frame against the DCI cap, and any parameter that changes partway through. The same scan runs on IMF AS-02 picture, minus the cinema-only rules.

🌈

Color space

Detects XYZ / DCI-P3 / Rec.709 and confirms 12-bit depth, with out-of-gamut sampling.

🌞

HDR metadata

HDR10, HLG and Dolby Vision metadata, with MaxCLL and MaxFALL checks.

🎥

Stereoscopic 3D

The ST 429-10 reel is checked for both eyes, for a FrameRate twice the EditRate, and for essence that really is a stereoscopic J2K track. Each eye is scanned against half an edit unit's bitrate cap.

Sound and loudness

🔊

Levels

Per-channel peak and RMS in dBFS, with warnings on clipping near 0 dBFS and silent channels.

🎙

Loudness

EBU R128 / ATSC A/85 loudness measurement, ISO 21727 Leq(m) against the content kind's limit (82 dB advertisement, 85 dB trailer), and normalization to a target such as -23 LUFS when you need it.

🎵

Channels and labels

Checks the channel layout (2.0, 5.1, 7.1, immersive), MCA labels in the sound MXF, and the CPL's MainSoundConfiguration against the actual channel count.

🌐

Dolby Atmos

Detects Dolby Atmos (ST 429-18) and IMF IAB essence. Atmos reports the object count from the descriptor; IAB is reported as present.

🔗

A/V sync

Flags picture and sound drift, per reel.

Subtitles and accessibility

📜

Timing and structure

Bv2.1 timed-text rules: in/out order, overlaps, minimum duration and gap, a too-early first subtitle, StartTime and EntryPoint, a cue that runs past its reel, a language that changes mid-composition, and a subtitle or caption missing from a reel.

📄

Readability and identity

Line count and length limits, closed-caption character-set and layout, required Language and LoadFont, schema validation of the DCST document, the 640 kB / 10 MB font caps, and the ST 429-5 rule that ResourceID repeats the document Id.

Accessibility tracks

Detects and checks audio description, hearing-impaired and closed-caption tracks, including MXF-wrapped SMPTE subtitles and encrypted timed text when a KDM is supplied.

Encryption and keys

🔒

Encryption status

Spots encrypted assets. A composition that mixes encrypted and clear essence is an error. Encrypted picture, sound and timed text are checked when you pass a KDM, on a DCP and on an IMP alike. Without a key the report says so rather than passing quietly.

🔑

KDM checks

Validates KDMs against the ST 430-1 / 430-3 schemas: the validity window, that the key matches the right CPL, thumbprint length, and that the assume-trust marker is not mixed with a real device list.

Automated QC

🔍

Automatic QC scan

Finds black frames, freeze frames, audio silence and clipping automatically, with thresholds you can set.

📋

QC reports

Clean HTML or PDF reports with package, track and per-track loudness summaries, plus a JPEG 2000 forensics table per picture track, ready for a client name and title.

📈

Compare two packages

Diff two DCPs to see exactly what changed, down to a perceptual picture fingerprint.

Delivery targets

🎥

Theater server profiles

Check a package against pre-built profiles for Dolby, Barco, Christie, GDC and IMAX servers. Separate playback warnings flag a 25/30/48/50/60 fps feature, 4K 3D, or a sound track that is not 8 or 16 channels, which many rooms will not play even when the package is legal.

🏭

Facility ingest check

A pre-delivery readiness pass for theater ingest, so a package clears the door on the first try.

🆔

Streamer IMF delivery

Netflix IMF delivery checks, with deep IMF conformance run through Netflix Photon for IMF packages.

🗝

ISDCF naming

Validates the content title against the ISDCF naming convention: content type, resolution, audio and language.

Fix and automate

🔧

Auto-fix common problems

Repairs the usual suspects: hash mismatches, wrong SMPTE/Interop namespaces and invalid ContentKind, with a dry-run to preview first.

📁

Watch folders

Point it at an ingest folder and it checks new packages as they land.

DCP Doctor vs. EasyDCP

A delivery check you can run on every workstation, free and open source.

Feature DCP Doctor EasyDCP Plus
SMPTE Bv2.1 Compliance
Interop DCP Support
Hash Verification
J2K Bitrate Analysis (250 Mbps DCI cap)
JPEG 2000 forensics and App 2E descriptor checks-
Audio Loudness (EBU R128 + Leq(m))
Dolby Atmos / IAB
Stereoscopic 3D
Up to 4K
23.98 to 120 fps
SMPTE 428-7 / Bv2.1 timed text
Subtitle Font Validation
KDM Validation
CLI / Scriptable
HDR metadata (Dolby Vision RPU, HDR10 light levels)-
Dolby Vision RPU (profile, frames, MaxCLL/MaxFALL)-
Netflix Delivery Spec-
IMF Validation (Photon)
Accessibility Tracks-
Content Fingerprinting-
Color Gamut Validation-
Certificate Chain Trust
ISDCF Naming-
DCP Diff / Comparison-
JSON/HTML Reports-
macOS / Windows
Linux-
Price Free (AGPLv3) Commercial

Fit it into your pipeline

The command-line build does everything the app does, so you can batch a whole day of deliveries, watch an ingest folder, or wire checks into your own tools.

Command line

Check a package

Run a full check and get a pass/fail exit code you can act on.

dcpdoctor /path/to/DCP
dcpdoctor validate --deep-j2k --check-mxf /path/to/DCP
Watch folder

Auto-check on arrival

Watch an ingest folder and check each new package as it lands.

dcpdoctor watch /ingest/incoming
REST API

Call it from your tools

Run a small HTTP service and POST a package path to check it.

dcpdoctor serve --port 8080

Build from source

The project is open source under the AGPL. The core and command line are written in Rust; the desktop app wraps them with Tauri.

# command line (needs a Rust toolchain)
git clone https://github.com/PostPerfection/dcpdoctor.git
cd dcpdoctor/rust && cargo build --release

# desktop app (needs Node.js + pnpm as well)
cd ../gui && pnpm install
pnpm tauri build

Full build notes and platform prerequisites are in the README. Source, issues and pull requests live on GitHub.

Ready to check your next delivery?

DCP Doctor is free and open source (AGPL), for cinema and streaming post-production. Download it or check a package in your browser.

Part of the PostPerfection suite · Open to contributions from everyone