Same set, same USB stick. One track needs the trim at three o'clock and the next one sits at noon. On the laptop they were even.
That is rekordbox Auto Gain doing its job in one place and not the other. Auto Gain is a setting inside rekordbox. It evens out the levels while rekordbox is the thing playing the music, on its own decks in PERFORMANCE mode and in the DUAL PLAYER layout of EXPORT mode. The number it works out is never written into the audio file, so a CDJ reading the stick has no idea it exists.
Where the number lives
The switch is Preferences > Controller > Mixer > Auto Gain (rekordbox 7.2.18 Instruction Manual, p. 242). Each track's value shows up, and can be changed by hand, on the Auto Gain knob in the GRID EDIT panel (p. 140). The DUAL PLAYER layout of EXPORT mode has its own AUTO GAIN control (p. 122). All of it lives in rekordbox's library, next to the track, not in it.
| Where it lives | Survives the USB export |
|---|---|
| The Auto Gain value, on the rekordbox side | ✗ no |
| Beatgrid and cues, in the file and the XML | ✓ yes |
| Gain written into the file | ✓ yes |
Turn Auto Gain off for a minute and you hear the level that is actually in the file. That is the level a CDJ plays.
What it aims for, measured
rekordbox does not document a target. I read the GRID EDIT value for six tracks on 2026-10-02 and measured each track's integrated loudness. Every value came out as about -10 LUFS minus the track's integrated loudness, to within 0.1 dB. So Auto Gain is loudness matching at playback: it raises quiet tracks as well as lowering loud ones. Six tracks is a small sample, but the fit was tight enough to be useful.
Why not copy that number into the file?
Inside rekordbox that works because the gain is applied in the mixer. Written into a file, gain has a hard ceiling at 0 dBFS, and loudness matching runs into it.
Take a dynamic track with 14 dB between its integrated loudness and its true peak. To bring it to -10 LUFS, its peak would have to go to +4 dBTP. A file cannot hold that, so the track either gets a limiter or stays below the target. Any track whose peak-to-loudness ratio is bigger than the gap between the target and the ceiling has the same problem.
So the tool I built aligns something else: one true peak ceiling for every track, -0.5 dBTP by default, which is the AES TD1008 §7B figure. Quiet tracks come up, loud ones come down, and nothing goes over 0 dB. The trim stays at twelve o'clock.
The trade-off, stated plainly: this is not loudness matching. A heavily compressed master still sounds louder than a dynamic one that only touches the ceiling on transients. The difference left is the difference between the masters, and the rest is still your ears. The two approaches are compared in more detail in Loudness normalization for DJs: a LUFS target or a true peak ceiling?
What the tool does to the file
- Exactly one gain change per track, no limiter. The waveform keeps its shape and the dynamics stay as the master left them
- MP3 and AAC are not re-encoded. For MP3 the tool rewrites the global_gain field in each frame, so the decoded audio is identical apart from the gain. That field moves in 1.5 dB steps, so MP3 and AAC land within one step of the ceiling rather than exactly on it
- Lossless files (FLAC, AIFF, WAV, and ALAC) get the exact gain through ffmpeg and are written back in their original sample format
- Files are rewritten in place, so cues and beatgrids stay linked, and every run is backed up first
$ baken headroom --backup ~/Music/DJ ✓ Found 318 audio files ✓ Backup directory: ~/Music/DJ/backup ✓ Done! 254 files processed. Measurement is in-process BS.1770-4, not ffmpeg loudnorm. How Headroom measures loudness and true peak has the parity numbers against ffmpeg.
One step on the rekordbox side
After the level in the file changes, rekordbox's stored Auto Gain value still describes the old file. Either re-analyse the tracks, or switch Auto Gain off so the laptop plays what the CDJ will play. The second option is the honest preview of the booth.
The general move
This is the same shape as key and BPM sorting: anything rekordbox does in software stops at the laptop. Auto Gain stays in the library, a sort stays on the screen, and the CDJ reads only what is on the stick. The fix is to bake it into the thing that travels.
The tool is baken, MIT, Rust, macOS, Windows, and Linux: https://github.com/M-Igashi/baken. There is also a native Mac app, Bake'n Deck, which lets you pick a playlist, check every row, and then apply. The command line does the same work and stays free.
Full version of this write-up, which is the canonical one: https://baken.ravers.workers.dev/auto-gain
rekordbox, CDJ, and Pioneer DJ are trademarks of AlphaTheta Corporation. This project is not affiliated with or endorsed by AlphaTheta Corporation.