Generative 120 BPM Music Beds
Use motionmind music to create beat-synced background tracks with dynamic sections and auto-ducking.
Prevent platform compressors from squashing your sound with -14 LUFS integrated and -1 dBFS true peak QA.
A video plays next to hundreds of others in a feed. Too quiet and it sounds weak next to them; too loud and the player turns it down anyway. MotionMind gives every video with sound one target and checks it on the rendered file:
| Measure | Target |
|---|---|
| Integrated loudness | −14 LUFS, ±0.5 |
| True peak | at most −1 dBFS |
Videos without sound pass; silence is a choice.
LUFS measures loudness the way people hear it, over the whole video. Streaming players normalise: Spotify plays at −14 LUFS by default, and YouTube turns uploads that are louder than its playback level down. A master pushed to −8 doesn't play louder there; it's turned down by about 6 dB, and what's left is a squashed mix with less punch. Social apps don't publish a target. −14 sits at the level players already aim for, so nothing gets turned down much, and it leaves room for the music and SFX to breathe.
True peak is the highest point of the waveform, including peaks that appear between samples when the file is decoded. Compressing to AAC for upload can push peaks a little higher, and anything over 0 dBFS distorts. A ceiling of −1 dBFS keeps that margin.
motionmind render and motionmind log measure the rendered MP4 with ffmpeg's EBU R128 meter and print both numbers. The run page in MotionMind Studio shows them under Loudness, with QA ✓ or QA ✗ next to the stage. You can measure any file the same way:
ffmpeg -nostats -i video.mp4 -af ebur128=peak=true -f null - 2>&1 | grep -A14 'Summary:' | grep -E 'I:|Peak:'
For the fixed v3 it prints:
I: -14.2 LUFS
Peak: -2.4 dBFS
In the demo, v3 came out at −19.3 LUFS. Promoting it to production fails, in the Studio and in the CLI alike:
QA failed for 'demo-launch-6s-v3': -19.3 LUFS (target -14 ±0.5). Fix the mix and re-render, or override (CLI: --force; Studio: the override checkbox).
motionmind promote demo-launch-6s-v3 --stage production # refused while QA fails
motionmind promote demo-launch-6s-v3 --stage production --force # only if you accept the miss
An override (--force, or the checkbox under Change stage) is possible when you deliberately accept the miss, and it's written to LOG.md with the numbers. Re-rendering a production version that no longer passes moves it back to staging.
HyperFrames doesn't normalise loudness on its own. The level comes from a gain node on the root of the composition, and a true-peak limiter after it holds the ceiling:
<div id="root" data-composition-id="main" data-start="0" data-duration="6"
data-width="1080" data-height="1920"
data-fx-chain='{"version":1,"nodes":[
{"type":"gain","id":"m1","params":{"gain":8.3}},
{"type":"truepeak","id":"m2","params":{"ceiling":-2.5,"lookahead":3,"release":80}}]}'>
Change the gain by the difference between the target and the measurement, then render again. Here: −14 − (−19.3) = +5.3 dB, so the gain went from 3 to 8.3, and the next render measured −14.2 LUFS, true peak −2.4 dBFS. The limiter means it's rarely exact, so always read the new numbers. Too loud works the same way: lower the gain by the difference, and lower loud SFX rather than pushing the limiter.
You normally ask the agent to do this; it follows the same steps:
Revise demo/launch-6s v3-hot-by-7: it measures -19.3 LUFS. Bring it to -14 LUFS with true peak
at or below -1 dBFS, and tell me the numbers after the render.
With −14.2 LUFS and −2.4 dBFS, v3 passes and goes to production. For the stages behind that, see Managing Campaigns vs Version Branches.
Use motionmind music to create beat-synced background tracks with dynamic sections and auto-ducking.
Organize vector SVG logos, 2x captures, and 22 built-in CC0 sound effects in shared/brands/ for your agent.
Understand how MotionMind equips AI agents with a studio-grade video production process and versioned records.
Open your terminal, launch motionmind ui, and brief your AI agent.