|
2 | 2 |
|
3 | 3 | Release history for the DaVinci Resolve MCP Server. The latest release is summarized in the root README; older entries live here to keep the README focused. |
4 | 4 |
|
| 5 | +## What's New in v2.102.0 |
| 6 | + |
| 7 | +**A rough mix that reports what it achieved, not what it intended.** The pieces were |
| 8 | +already here — `media_analysis` measures EBU R128 loudness and detects silence, |
| 9 | +`delivery_targets` holds the standards, `loudness_qc` grades a finished file. What was |
| 10 | +missing is the step between measuring and grading: deciding the gains. |
| 11 | + |
| 12 | +### Added |
| 13 | + |
| 14 | +- **`media_analysis mix_plan`** — dialogue-normalisation gain, a music-bed level relative |
| 15 | + to it, and ducking windows derived from silence detection **on the dialogue stem**, so |
| 16 | + the bed follows the words rather than a hand-placed envelope. `dry_run` defaults to |
| 17 | + true and renders nothing. |
| 18 | + - **The achieved loudness is measured, not derived.** The premix is rendered, then |
| 19 | + re-measured; `achieved` carries integrated LUFS, true peak, loudness range, and the |
| 20 | + delta from target. A plan that hits its target on paper and clips on true peak is a |
| 21 | + failed plan, and only the measurement tells you which one you have. |
| 22 | + - **Dialogue-anchored, then programme-trimmed.** Anchoring dialogue at target is right |
| 23 | + for a dialogue-gated standard and wrong for a full-programme one the moment a bed is |
| 24 | + added. For non-dialogue-gated standards one measured trim is applied to everything |
| 25 | + equally — preserving the dialogue-to-bed relationship — and reported as |
| 26 | + `program_normalize.trim_db`. It never runs on a dialogue-gated standard, where |
| 27 | + dialogue is the figure being graded. |
| 28 | + - **Nothing else is corrected.** `loudness_off_target`, `true_peak_over`, and `clipped` |
| 29 | + come back as flags with remedies, never as a quietly normalised file. |
| 30 | + - Standards come from `delivery_targets` (`web`, `podcast`, `ebu_r128`, `atsc_a85`, |
| 31 | + `ott_dialogue_gated`) — the table the delivery tools already grade against, not a |
| 32 | + second copy. |
| 33 | +- **`media_analysis measure_loudness`** — integrated LUFS, loudness range, and true peak |
| 34 | + per file. |
| 35 | +- **`media_analysis mix_plan_capabilities`** — dependency state, known standards, and the |
| 36 | + defaults, including the music-bed offset, which is the number most likely to be argued |
| 37 | + with and so is named rather than buried. |
| 38 | + |
| 39 | +### Fixed while building it |
| 40 | + |
| 41 | +The new loudness parser reads the `Summary:` block **and** drops ebur128's per-frame |
| 42 | +progress lines, which carry their own `I:` and `LRA:` fields. A plain last-match-wins |
| 43 | +parse is correct only because ffmpeg happens to print the summary last, and scoping to |
| 44 | +the summary alone still swallows a progress line printed after it. Both steps are needed; |
| 45 | +a test with a trailing progress line pins it. |
| 46 | + |
| 47 | +### Scope |
| 48 | + |
| 49 | +A rough mix: gain staging, a bed, and ducking. No EQ, compression, de-essing, or |
| 50 | +limiting, and the module says so in its capabilities rather than leaving it implied. |
| 51 | + |
| 52 | +### Validation |
| 53 | + |
| 54 | +- Offline suite: 2924 passed, 1 skipped, 711 subtests, 0 failures. |
| 55 | +- End-to-end through real ffmpeg on generated tones: target hit from measurement, the |
| 56 | + programme trim landing a hot bed on R128, a dialogue-gated standard refusing the trim, |
| 57 | + and clipping reported rather than normalised away. |
| 58 | +- Three deliberate mutations (silent peak normalisation, trimming a dialogue-gated |
| 59 | + standard, and dropping the parser scoping) were each caught. The parser mutation was |
| 60 | + caught only after the test was strengthened — the first version of it passed against |
| 61 | + both the fix and its absence. |
| 62 | +- No Resolve behavior changed; live test not required. |
| 63 | + |
5 | 64 | ## What's New in v2.101.0 |
6 | 65 |
|
7 | 66 | **A grade can now reject itself.** `assess_grade` has measured grade damage since |
|
0 commit comments