MCP tool for audio loudness normalization detection and OTIO timeline annotation generation. Measures loudness with ffmpeg loudnorm/volumedetect and writes loudness instructions to timeline-level metadata.
Project description
clipwright-loudness
MCP tool for audio loudness normalization detection and OTIO timeline annotation generation.
Overview
Measures audio loudness and peak level using ffmpeg loudnorm / volumedetect filters,
writes loudness instructions (mode, target, measured) to timeline-level metadata["clipwright"]["loudness"].
Performs detection only (OTIO annotation); realization (ffmpeg filter application) is done once by clipwright-render
(design M3: separation of detection and application).
Normalization modes:
loudnorm(EBU R128 LUFS): Two-stage linear method. detect measures withloudnorm print_format=jsonand savesmeasured_*parameters to OTIO annotation; render applies exact one-pass withloudnorm:linear=true.peak(max dB match): Measures max_volume withvolumedetectand applies gain difference in render.
Initial render support:
trackscope only (single loudness normalization applied to entire timeline).per_clipscope (individual clip application) deferred until after compositing.
Prerequisites
- Python 3.11 or later
- ffmpeg / ffprobe must exist on PATH or full paths set in environment variables
CLIPWRIGHT_FFMPEG/CLIPWRIGHT_FFPROBE.
Add ffmpeg to PATH directly or specify via environment variables:
export CLIPWRIGHT_FFMPEG=/path/to/ffmpeg
export CLIPWRIGHT_FFPROBE=/path/to/ffprobe
MCP Tool
clipwright_detect_loudness
Parameters
| Name | Type | Default | Description |
|---|---|---|---|
media |
string |
required | Input media file path (audio required) |
output |
string |
required | Output OTIO timeline path (.otio, same directory as media) |
options.mode |
"loudnorm" | "peak" |
"loudnorm" |
Normalization mode |
options.target_i |
float |
-14.0 |
loudnorm mode: target integrated loudness (LUFS, -70 to -5) |
options.target_tp |
float |
-1.0 |
loudnorm mode: target true peak (dBTP, -9 to 0) |
options.target_lra |
float |
11.0 |
loudnorm mode: target loudness range (LU, 1 to 50) |
options.target_peak_db |
float |
-1.0 |
peak mode: target peak level (dB, -60 to 0) |
timeline |
string | null |
null |
Existing OTIO timeline path (if specified, append to it) |
Dependencies
| Package | Purpose |
|---|---|
clipwright |
Shared types, envelope, errors, process.run |
mcp[cli] |
MCP server |
pydantic |
Parameter validation |
ffmpeg / ffprobe are invoked as separate processes (via PATH or environment variables) for license independence.
loudnorm Linear Two-Stage Method
- detect (this tool):
ffmpeg -i <media> -af loudnorm=I=-14:TP=-1:LRA=11:print_format=json -f null -gets measured_* parameters and saves them to OTIO annotation. - render (clipwright-render):
loudnorm=I=-14:TP=-1:LRA=11:measured_I=..:...:linear=trueexecutes only one-pass linear application with detected parameters (improved accuracy).
Installation and Startup
Within a uv workspace:
uv run --package clipwright-loudness clipwright-loudness
Or install directly:
uv add clipwright-loudness
clipwright-loudness
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file clipwright_loudness-0.1.1.tar.gz.
File metadata
- Download URL: clipwright_loudness-0.1.1.tar.gz
- Upload date:
- Size: 11.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.19 {"installer":{"name":"uv","version":"0.11.19","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
40312ee0d9d860d5d13d495722f76e9fc645a826c6510cf01f5c7b0dfdb888ef
|
|
| MD5 |
47f9b698b38ccf263244c919af71bc49
|
|
| BLAKE2b-256 |
3f21c2f358662c784a01eb03a31dd82b259b91c85312f84a6a0c24565e93aa5f
|
File details
Details for the file clipwright_loudness-0.1.1-py3-none-any.whl.
File metadata
- Download URL: clipwright_loudness-0.1.1-py3-none-any.whl
- Upload date:
- Size: 14.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.19 {"installer":{"name":"uv","version":"0.11.19","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2d5404fa42301d5b10a90f0e417b3a1642971f2e072601a751c61fad4ecf204f
|
|
| MD5 |
8d778e0eec0b3481f8a29fde4589796f
|
|
| BLAKE2b-256 |
28b198c9de8f3ed14e4596bbf584c907e105a266eb2bfbf8cbf0165c8b16af3d
|