Does this file comply? Ask before you send.

Drop a WAV, a bounce folder or a delivery package and name the destination. cumple measures it the way that destination does, says which rule fails, quotes the rule, and suggests the fix. The QC sheet travels with the delivery.

Download for macOS Also Windows, Linux, Intel Mac. Or install with uv.

Free and open source under the MIT licence. No account, no server, nothing leaves the machine. The builds are unsigned, so the first launch takes one extra step; the steps are below. Source on GitHub.

The cumple window: the Check tab with three queued items, two bounces and a delivery package, each with its verdict, and the QC sheet open on the right with a FAIL stamp
The Check tab on the synthetic demo set, against Netflix stereo (2.0): a hot bounce fails on integrated loudness, true peak and packaging. The sheet shows the numbers, the limits and the fix.
  • The platform's QC measures the file the way the platform does, and it runs after you have sent it.
  • The specs are PDFs and partner portals that change without notice, and a number copied out of one carries no date.
  • A meter tells you a number. It does not know which rule applies to this file, for this destination.

What you do with it

Read the verdict, with the clause attached

Every rule gets PASS or FAIL, the measured value, the limit, the standard it comes from and the destination's own words. Under the findings it prints what would fix it, in decibels. Integrated and dialogue-gated loudness, true peak, loudness range, sample rate, bit depth, channel layout, packaging, padding, mono compatibility, the metadata's own loudness claim.

One HTML file with its type embedded. It opens offline, on a phone, and prints to A4; a PDF comes through the Chrome you already have.

A cumple QC sheet: a stereo printmaster failing Netflix on integrated loudness and true peak, with the measured values, the limits and what would fix it
The QC sheet for a hot stereo printmaster against Netflix 2.0, from the demo set.

Watch the bounce folder

Point cumple at the folder your DAW bounces into. Every file that lands gets a sheet next to it and a line in the folder's CSV log, once its size and modification time have held still. Sources are never touched or moved. The same watcher runs in the app's Watch tab, with a live table, or as cumple watch on a machine nobody looks at.

time,file,profile,verdict,integrated_lufs,true_peak_dbtp,lra_lu,duration_s,failed,sheet
2026-09-08T00:29:04+00:00,hot.wav,netflix-2.0,FAIL,-0.40,-0.39,0.00,12.000,loudness.integrated;peak.true;format.packaging,bounces/hot.qc.html
2026-09-08T00:29:04+00:00,r128-ok.wav,netflix-2.0,FAIL,-23.00,-22.99,0.00,12.000,format.packaging,bounces/r128-ok.qc.html
The CSV log after two bounces from the demo set landed. The second file is at -23 LUFS and fails Netflix on packaging alone: Netflix wants one mono file per channel.

See where the loudness lives

The sheet shows the short-term loudness over time, the integrated value as a line, the destination's window as a band, and a dot on the loudest 3 seconds, so a failure points at a place in the programme.

The short-term loudness timeline from a QC sheet: the 3 second short-term loudness over time, the integrated value as a dashed line, the destination's window as a shaded band, and a dot on the loudest 3 seconds
The timeline block of a QC sheet.

Diff two versions, or stems against the printmaster

One sentence gives the gain change, the offset in samples and milliseconds, the polarity, the EQ as third-octave bars, and what is left once all of that is corrected. Stems summed against the printmaster are judged at level, so the residual is the real difference. The diff has its own sheet.

A cumple diff sheet: the gain, offset and residual numbers, the levels of both files, and third-octave bars with a lift in the upper mids
v13 against v12 from the demo set: the same material, treated differently, with a lift around 2.5 kHz.

How we know the numbers are right

Every measured number on this page comes from a report in the repository, and the disagreements are written down too. The dialogue gate is a labelled approximation of Dolby's algorithm: against two open films it read 1.6 LU low on Tears of Steel and 6.7 LU low on Sintel, whose dialogue sits under an orchestral score. docs/DIALOGUE.md has the method and the numbers. A second detector, Silero VAD, is one flag away and is measured in the same report. 327 tests with 92 % line coverage run on macOS, Windows and Linux.

39 destinations, every number with a source and a grade

A profile is one YAML file that quotes the document it comes from, names the grade of that access (READ, the primary document was read; SECONDARY, another standards body's table; COMMUNITY, the platform publishes nothing) and records the date it was read. Where a source is silent on a tolerance, the profile says the number is the tool's own default.

The 39 destinations by family
FamilyCountDestinations
Streaming17Netflix stereo (2.0) and 5.1 near-field printmasters; Apple TV+; Amazon MGM Studios 2.0 and 5.1 as discrete mono files, and Prime Video Direct; Disney+ near-field 2.0 and 5.1, 7.1 and Atmos; Disney A85 for General Entertainment, Disney R128 for dubs, the Disney in-home trailer; Warner Bros. Discovery / Max; Hulu (the 2018 guidebook, marked stale); Paramount Global for Pluto TV; Peacock (community-reported); ATSC A/85:2026 Annex L streaming; AES TD1008 speech-anchored.
Broadcast11EBU R 128 programme and s1 short-form; ATSC A/85:2026; UK DPP / AS-11; Free TV Australia OP-59; ARIB TR-B32 (Japan, from an AES table); CBS, ABC and NBCUniversal commercial delivery; Fox Networks program (2018) and commercial (2024) material.
Cinema3Cinema trailer (TASA, 85 dB Leq(m)); cinema advertising (SAWA, 82 dB); DCP 5.1 in ISDCF channel order.
Music6Spotify; SoundCloud; Apple Digital Masters; Apple Music immersive audio; YouTube (community-measured); AES TD1008 music.
Podcast and audiobook2Apple Podcasts; ACX / Audible.
Looked for, not public8Sony Pictures, Lionsgate, Starz, Universal Pictures theatrical, Paramount+ originals, HBO and Max brand specs, Warner Bros. Pictures theatrical, Peacock programme delivery: no public document a tool can quote, so no profile, and the search is recorded with its date.

Grades across the 39: READ 36, COMMUNITY 2, SECONDARY 1; 14 profiles carry a stated tool default where the source is silent. The full matrix with every clause and source is docs/SPECS.md.

How it works

  1. Drop the bounce

    A file, a folder of bounces, or a delivery package of discrete mono files whose channel roles are read from the file names.

  2. Name the destination

    One of 39, grouped by family, with the grade of its source beside the name. Or add your own as one YAML file.

  3. Read the verdict

    PASS or FAIL per rule, the measured value, the limit, the standard, the source's words, and the fix in decibels.

  4. Send the sheet

    HTML or PDF next to the file, JSON beside it, and a CSV log for the folder. Nothing needs a terminal, a server or an account.

What it does that the meters do not

cumple measures with the same standards these meters implement, and adds the destination's rule, the source of that rule, and a sheet to send. Every cell below comes from the tool's own documentation or source, or from a run recorded in the repository: docs/RELATED.md lists what was read and when, and docs/BENCHMARK.md is the run.

Capability comparison, cumple against five other tools
Capabilitycumplelibebur128pyloudnormffmpeg ebur128loudcheckDeltaWave
BS.1770 loudness and true peakyesyesintegrated and range, no true peakyesyes, measured by ffmpeg loudnormR 128 loudness, true peak and LRA per its release notes
Passes the EBU test set24 of 24 readings in our run; 29 of 29 cases in the conformance report24 of 24 readings in our run; its own tests open the EBU files15 of 15 readings in our run, loudness and range only24 of 24 readings in our run, no published report of its own23 of 24 readings in our run, through ffmpeg loudnormno published report; Windows only
Named destinations with graded sources39nononoEBU R 128 and ATSC A/85; no platform presets, by designno
The clause behind each verdictyesno verdictsno verdictsno verdictsa one-line citation per gated metric, paraphrasedno verdicts
A report that travels with the deliveryHTML, PDF, JSON, CSV logno, library onlyno, library onlyno, log output onlyJSON on stdout, no file writtenHTML report, batch via Report Cruncher
Diff in words, stems null testyesnononononull test with level, offset and clock drift matched
Watch folder and desktop appyes, three platformsnononono; batch over a folder and an MCP serverdesktop app, Windows only
Runs offline, no accountyesyesyesyesyes, with ffmpeg installedno account mentioned; offline not stated
LicenceMITMITMITLGPL 2.1 or laterMITfree of charge, all rights reserved, no program source published

docs/RELATED.md adds three tables, "Open-source meters run here", "Commercial meters, from their documentation" and "File-based QC platforms, from their documentation"; the second and third were read from documentation, not run here, the first was run on the EBU files, and what each tool lists against cumple is there.

Questions

Is cumple free?

Yes. MIT licence, no account, no server, no tier. The app and the command line are the same code, in one repository.

Does my audio leave the machine?

No. Nothing is uploaded. The only external programs cumple runs are already on the machine: Chrome, Chromium or Edge to print a PDF, and ffmpeg and ffprobe, when they are installed, to decode a compressed delivery.

Which destinations does it know?

39, each with the grade of its source and the date the source was read. A destination you add is one YAML file in your config folder, and a pull request if you want everyone to have it.

How accurate is the meter?

All 29 cases of the official EBU Loudness Test Set pass, with 66 of 66 Tech 3341 readings inside the published tolerance, and integrated loudness lands within 0.05 LU of libebur128, ffmpeg and pyloudnorm on the same files. The reports are in the repository and a script regenerates them.

Does it measure dialogue-gated loudness like the studios?

Approximately. Netflix, Amazon and Disney gate on dialogue with a Dolby algorithm nobody outside Dolby can run. cumple uses a heuristic speech detector, labelled as such on every sheet, that read 1.6 and 6.7 LU low on two open films; the full-programme value is always shown beside it, and Netflix's own fallback rule is applied before anything is flagged.

Which files does it read?

WAV, BWF, RF64, AIFF, FLAC and MP3, mono to 7.1 and packages of discrete mono files. With a local ffmpeg it also decodes AAC, AC-3 and E-AC-3 and the audio of MXF, MOV and MP4 files that carry one audio stream, and the report names the decoder; diff and fix still need PCM files. No Dolby Atmos or ADM checks yet.

Which platforms?

macOS on Apple silicon and Intel, Windows 10 and 11 on x64, Linux on x86_64. The builds come from CI and are unsigned; the macOS build is the one exercised by hand so far, and the Windows and Linux builds open their window and check a test tone in CI. Any machine with Python 3.12 can install the command line with uv.

Honest limits

  • The dialogue gate is a heuristic and the weakest meter in the tool on film mixes; the numbers above say by how much.
  • No Dolby Atmos or ADM checks yet: cumple reads BWF metadata but does not validate beds, objects or track mappings.
  • Without a local ffmpeg it reads only what libsndfile reads (WAV, BWF, RF64, AIFF, FLAC and MP3); it does not find the 2-pop, and does not compare the audio to the picture.
  • Leq(m) for cinema rests on a stated convention, not a calibrated room; the stem null tolerance is the tool's default, since no studio publishes one.
  • The PDF needs a local Chrome, Chromium or Edge; the HTML sheet is written regardless and is the deliverable. The desktop builds are unsigned; Windows and Linux builds are self-tested in CI, where they open their window on a test tone, and are not yet run by hand.

Free and MIT licensed.

The app and the command line are one MIT-licensed repository. There is no hosted version, no account and no tier.

If the destination you deliver to is not there, it is one YAML file with the clause quoted and the source graded, and a pull request. Every profile in the registry was built that way.

Who made it

cumple is written by Victor E. Diaz. He spent a year as a studio engineer at Paleta Creativa in San Juan, recording and mixing in sessions for clients such as Warner Bros., Caribbean Cinemas, GFR Media and Mobil, and checking each mix against the platform's spec sheet by hand and by ear before it went out. cumple is his own project, written after that year.

Most of the code was written with Claude. AI_USAGE.md records what the model did, what he decided, and the three times a test caught the model being wrong.

Download

One folder per platform, from the latest release. Unsigned, so the first launch takes one extra step.

  1. macOS: unzip, move cumple.app to Applications, open it once and let macOS refuse, then System Settings, Privacy and Security, Open Anyway. The terminal route is xattr -dr com.apple.quarantine /Applications/cumple.app.
  2. Windows: unzip, run cumple-app.exe. SmartScreen shows "Windows protected your PC": More info, Run anyway. The app needs Microsoft's WebView2 runtime, which Windows 11 and most Windows 10 machines already have; when it is missing the app says so and opens the download page.
  3. Linux: untar, run cumple-app/cumple-app. The folder includes a .desktop file and an icon for the launcher.

Or install the command line with uv

uv tool install --python 3.12 git+https://github.com/victor10days/cumple
cumple check master.wav --spec netflix-2.0

Add "cumple[app] @ git+https://github.com/victor10days/cumple" for the window from Python (cumple[app-qt] on Linux), then cumple app. The README has every command with real output.