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.
Free, open source (AGPL)
Windows, macOS, Linux
SMPTE, Interop, IMF
Nothing uploaded
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
Detects XYZ / DCI-P3 / Rec.709 and confirms 12-bit depth, with out-of-gamut sampling.
HDR10, HLG and Dolby Vision metadata, with MaxCLL and MaxFALL checks.
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.
Per-channel peak and RMS in dBFS, with warnings on clipping near 0 dBFS and silent channels.
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.
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.
Detects Dolby Atmos (ST 429-18) and IMF IAB essence. Atmos reports the object count from the descriptor; IAB is reported as present.
Flags picture and sound drift, per reel.
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.
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.
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.
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.
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.
Finds black frames, freeze frames, audio silence and clipping automatically, with thresholds you can set.
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.
Diff two DCPs to see exactly what changed, down to a perceptual picture fingerprint.
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.
A pre-delivery readiness pass for theater ingest, so a package clears the door on the first try.
Netflix IMF delivery checks, with deep IMF conformance run through Netflix Photon for IMF packages.
Validates the content title against the ISDCF naming convention: content type, resolution, audio and language.
Repairs the usual suspects: hash mismatches, wrong SMPTE/Interop namespaces and invalid ContentKind, with a dry-run to preview first.
Point it at an ingest folder and it checks new packages as they land.
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 |
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.
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 an ingest folder and check each new package as it lands.
dcpdoctor watch /ingest/incoming
Run a small HTTP service and POST a package path to check it.
dcpdoctor serve --port 8080
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.
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