Netflix Delivery Guide
IMF Application #2E · Dolby Vision HDR · -27 LKFS dialogue-gated
All-or-nothing rejection model
Netflix rejects the entire IMP package if any single track fails inspection. A loudness error in your audio kills your video delivery. A caption schema issue blocks the whole package. No other major platform works this way — and most teams find out the hard way.
Validation Pipeline
Netflix Validation Pipeline
All-or-nothing rejection: If any track fails IaaS inspection, the entire IMP delivery is rejected — including tracks that passed individually. A bad audio file kills your video delivery.
Photon is open source. Netflix published their IMF validator at github.com/Netflix/photon. Pipewright can embed Photon locally — meaning your preflight runs against Netflix's own validation tool before you ever upload.
IMF Package Anatomy
IMF Package Anatomy
One CPL per language. Defines the play-order of all tracks. Netflix requires language code in CPL to exactly match Backlot Source Request — even case matters.
Technical Specifications
Video
Audio
⚠ Dialogue-gated ≠ Integrated LUFS
NLE loudness meters show integrated LUFS. Netflix measures dialogue-gated (-27 LKFS). A mix that reads "-27 LUFS integrated" can still fail Netflix loudness. Always measure with a dialogue-gated meter.
29.97/59.94 Frame Count Gotcha
At 29.97 or 59.94 fps, the total number of frames in each CPL Segment must be divisible by 5 to preserve integer audio samples. If your edit doesn't land on a multiple of 5 frames, you must trim 1–4 frames before IMF wrapping. Most NLEs don't warn about this.
Check: total_frames % 5 === 0 → required for 29.97 and 59.94 delivery
Captions & Timed Text
Instant Rejections
Delivering SRT or VTT instead of TTML
Burned-in / hardcoded captions
TTML missing XML namespace declarations
Captions crossing shot changes
Characters outside Netflix Glyph List
Overlapping caption events in same region
Netflix IaaS Rejection Codes
21 codes documented
21 error codes
Select an error code to see details
Platform Complexity Comparison
Delivery Complexity by Platform
Netflix is 4× more complex than YouTube. Existing indie tools support YouTube and TikTok. Nobody has built the Netflix-grade preflight tool at an indie price point.
The NPFP Problem
Netflix Preferred Fulfillment Partners (NPFPs) are certified post houses that deliver on behalf of content partners. Their published rates show the true cost of Netflix delivery expertise:
$1,320
HD IMF Packaging
Feature length
$1,800
UHD/4K IMF Packaging
Feature length
$430
Timed Text / language
Per language
$170
Alt Audio / language
Per language
Pipewright's opportunity: Teams that CAN'T afford NPFP rates or don't have a post house relationship still need to deliver to Netflix. A $200/month preflight tool that catches the top 15 rejection codes before you upload is worth 15× the NPFP fee on a single prevented redelivery.
What Pipewright Validates
Pipewright catches
IMF package structure (ASSETMAP, PKL, CPL integrity)
CPL segment frame count divisibility at 29.97/59.94
Video resolution matches request
Frame rate native — no telecine/pulldown
ProRes vendor_id compliance
Commercial blacks (>2 sec) detection
Audio channel count vs. spec
Loudness: -27 LKFS dialogue-gated
True peak: -2 dBTP
MCA audio label matching
Caption format (TTML required)
TTML schema validation
Caption overlap detection
1-second head/tail black requirement
Language code exact-match
Burned-in caption detection
Roadmap / requires Netflix tools
Dolby Vision metadata per-frame validation (requires Dolby tools)
Dolby Atmos bitstream validation (requires Dolby encoder)
Photon IMF validation (integration planned — open source)
Photo-Sensitive Epilepsy testing (requires Harding engine)
Netflix Glyph List compliance (character-level)
Shot-change timing validation for captions