# Free LUFS Loudness & Media Info API

`POST https://audo.ai/api/try/media-info` (tool `analyze_audio`) is a free cloud REST API that measures EBU R 128 integrated loudness (`LUFS`), true peak (`dBTP`), loudness range (`LU`), RMS noise floor (`dB`), sample peak, average RMS level, clipped samples, silent timestamp ranges, and container/codec details for any audio or video file up to 10 GB.

- **Cost:** Always free (`$0.00`, 0 credits) for the entire file—up to 20 files a day per person without an API key or account.
- **Formats:** Audio (WAV, MP3, M4A, AAC, FLAC, OGG, Opus, WebM, AIFF) and video (MP4, MOV, MKV, WebM, AVI).
- **Web tool:** Try it in the browser on the [Free LUFS meter](https://audo.ai/lufs-meter?utm_source=markdown&utm_medium=agent) or [File info](https://audo.ai/media-info?utm_source=markdown&utm_medium=agent).

## Measure LUFS loudness with curl

Send a local audio or video file as `multipart/form-data`, or pass a public HTTPS URL as JSON:

```bash
# Upload a local file:
curl -F file=@episode.wav https://audo.ai/api/try/media-info -D response.headers -o response.body

# Or inspect a public HTTPS URL:
curl -X POST https://audo.ai/api/try/media-info \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com/episode.mp3", "detail": "concise"}'
```

For files up to an hour long, `/api/try/media-info` typically finishes within a few seconds and returns `200 OK` with the JSON report directly.

## Example JSON response

```json
{
  "duration_seconds": 184.2,
  "format_name": "mp3",
  "size_bytes": 4421880,
  "has_audio": true,
  "has_video": false,
  "audio": {
    "codec": "mp3",
    "sample_rate": 48000,
    "channels": 2,
    "bit_rate": 192000
  },
  "video": null,
  "loudness": {
    "integrated_lufs": -18.4,
    "true_peak_dbtp": -2.1,
    "lra_lu": 6.3
  },
  "noise_floor_db": -64.2,
  "peak_db": -2.2,
  "rms_db": -21.5,
  "clipped_samples": 0,
  "silences": [
    { "start_seconds": 12.45, "end_seconds": 15.12 },
    { "start_seconds": 48.3, "end_seconds": 51.05 }
  ]
}
```

### Response fields

| Field | Type | Description |
|---|---|---|
| `loudness.integrated_lufs` | `number` | Gated EBU R 128 / ITU-R BS.1770 integrated loudness across the whole file, in LUFS (equal to LKFS). |
| `loudness.true_peak_dbtp` | `number` | Highest inter-sample reconstructed peak, in dBTP. Keep at or below `-1.0 dBTP` for podcasts and streaming. |
| `loudness.lra_lu` | `number` | Loudness range (LRA) in LU, measuring the spread between quiet and loud sections. |
| `noise_floor_db` | `number` | RMS level of the quietest steady room-tone windows, in dB (useful for ACX audiobook `-60 dB` checks). |
| `peak_db` | `number` | Sample peak level in dBFS. |
| `rms_db` | `number` | Overall RMS level in dBFS (ACX audiobooks require `-23` to `-18 dB` RMS). |
| `clipped_samples` | `number` | Number of digital samples hitting full scale. `0` means no digital clipping. |
| `silences` | `array` | Silent stretches of `0.7` seconds or longer as `{"start_seconds", "end_seconds"}` pairs. `detail="concise"` (default) returns up to 50; `detail="full"` returns all of them. |
| `duration_seconds` | `number` | Verified decoded duration in seconds. |
| `audio` / `video` | `object \| null` | Codec, sample rate, channel count, bitrate, pixel dimensions, and frame rate. |

## Normalize to `-16 LUFS` or `-14 LUFS` in a second call

Once you have measured a file, you can normalize it to platform loudness targets with `POST https://audo.ai/api/try/loudness` (tool `adjust_loudness`, web page [Boost volume](https://audo.ai/volume-booster?utm_source=markdown&utm_medium=agent)). The first hour of each file is free (10 times a day, no API key), and whole files with an API key cost $0.01/min ($0.60/hr):

| `target` value | Target loudness | True-peak ceiling | Best for |
|---|---|---|---|
| `podcast` (default) | `-16 LUFS` | `-1 dBTP` | Apple Podcasts and RSS podcast feeds |
| `streaming` | `-14 LUFS` | `-1 dBTP` | Spotify, YouTube, and web video |
| `broadcast` | `-23 LUFS` | `-1 dBTP` | EBU R 128 broadcast television and radio |
| `audiobook` | `-23` to `-18 dB RMS` | `-3 dB` peak | Audible / ACX audiobook submissions (also returns `acx.passes` and `acx.problems`) |
| `custom` | `custom_lufs` (`-30` to `-5`) | `-1 dBTP` | Any custom LUFS target |

```bash
# Normalize to -16 LUFS for podcasts:
curl -F file=@episode.mp3 -F target=podcast https://audo.ai/api/try/loudness -D response.headers -o response.body

# Normalize to -14 LUFS for Spotify / YouTube:
curl -F file=@episode.mp3 -F target=streaming https://audo.ai/api/try/loudness -D response.headers -o response.body

# Normalize to a custom -18 LUFS target:
curl -F file=@episode.mp3 -F target=custom -F custom_lufs=-18 https://audo.ai/api/try/loudness -D response.headers -o response.body
```

If a recording has two speakers at very different volumes (for example a loud host and a quiet guest), use `POST https://audo.ai/api/try/level-speakers` (tool `level_speakers`, [Balance audio](https://audo.ai/audio-leveler?utm_source=markdown&utm_medium=agent)) to level each speaker's turns before setting the final LUFS target.

## Related docs and guides

- [Podcast loudness: LUFS targets for Spotify, Apple & YouTube](https://audo.ai/guides/podcast-loudness-lufs?utm_source=markdown&utm_medium=agent)
- [Free API and REST API reference](https://audo.ai/docs/api?utm_source=markdown&utm_medium=agent)
- [Noise Removal & Audio Cleanup API](https://audo.ai/docs/noise-removal-api?utm_source=markdown&utm_medium=agent)
- [Audio Cleanup & Transcription in n8n](https://audo.ai/docs/n8n?utm_source=markdown&utm_medium=agent)
