1 System Requirements and Limitations
1.1 System Requirements
macOS: Apple Silicon (ARM64), macOS 12 Monterey or later.
Windows: Windows 10 or Windows 11, 64-Bit.
Memory: min. 4 GB RAM recommended.
Disk space: approx. 200 MB for the app (excluding audio files).
ffmpeg is fully included in the app bundle. No additional software needs to be installed.
1.2 Limitations
The DJ-Tool runs in a virtualised Windows 10/11 environment on Apple Silicon Macs (e.g. Parallels), but the audio player is not available there due to missing ARM64 audio drivers.
Recursive folder scanning is not supported — only files located directly in the selected folder are loaded, not those in sub-folders.
The BPM and key detection works purely offline and locally. Results may deviate slightly from different DJ software.
2 Installation
2.1 Installation macOS
Open the DMG archive (double-click dj_mac.dmg).
Drag the app file into the /Applications folder.
On first launch macOS may show a Gatekeeper warning. In that case run the following command in Terminal:
xattr -cr "/Applications/DJ Cataclysm - DJ-Tool.app"
Start the app via Finder or Launchpad.
ffmpeg is fully included in the app bundle (Contents/Frameworks/ffmpeg). No further software needs to be installed.
2.2 Installation Windows
Extract the archiv dj_win.zip (e.g. to C:\Program Files\DJ-Tool\).
Start the file DJ Cataclysm - DJ-Tool.exe by double-clicking it.
Windows Defender SmartScreen may show a warning on first launch. Click "More info" and then "Run anyway".
ffmpeg.exe is located in the same folder as the executable and is found automatically. Both files must remain in the same folder.
3 Interface Overview
3.1 Main Window and Navigation
The app starts with the main window and shows the navigation on the left by default.
The main window consists of three areas:
3.1.1 Header Bar
The header bar contains the app name, the version number, and a language dropdown. The language can be switched to DE, EN, ES, IT, PL, or RU. After selecting, the app must be restarted for the language change to take effect..
3.1.2 Navigation
The tab bar contains the following 6 menu items:
Normalise
Conversion
ID3 Tags
Batch & Export
File Info
3.1.3 Log Area
The log area (at the bottom) is a scrollable output window showing status messages. Its height can be increased or decreased by dragging the handle bar (• • •) between the content and the log.
The navigation bar is fully loaded when the app starts. You can switch between menu entries at any time. Running processes (e.g. normalisation) are not interrupted by doing so.
3.2 Brief Description of Main Functions
3.2.1 Normalise
The normalisation function adjusts the loudness of audio files to −14 LUFS and limits the true peak to −1 dBTP. Originals are not modified.
3.2.2 Conversion
In the Conversion tab you can convert audio files between MP3, WAV, and FLAC. All common audio formats are accepted as input.
3.2.3 ID3 Tags
Here you find a full metadata editor with online connection to MusicBrainz, Discogs, and Spotify, as well as local BPM and key detection, cover artwork management, fingerprint search (AcoustID), and an audio player.
3.2.4 Batch & Export
All tools that operate on the entire loaded file list (ID3 Tags) are collected here:
Batch online tagging and cover search
BPM and key analysis
ReplayGain calculation, Platform comparison
Batch rename
Genre normalisation
Batch field replace
Auto-sorting
CSV export / import
Rekordbox XML export, Traktor NML, Serato M3U
Camelot Wheel, harmonic sorting
Duplicate detection
3.2.5 File Info
Displays various file properties in list form.
4 Normalise
4.1 Background: What does −14 LUFS mean?
LUFS stands for Loudness Units relative to Full Scale — the unit of measurement for the subjectively perceived loudness of an audio signal, standardised by the ITU-R BS.1770-4 specification.
Spotify, YouTube, Tidal: −14 LUFS
Apple Music: −16 LUFS
Beatport, SoundCloud: −8 LUFS (no automatic loudness adjustment)
The True Peak (dBTP) limits the maximum signal level after digital-to-analog conversion. The default value of −1 dBTP prevents clipping during lossy playback (Bluetooth, AAC streaming). The DJ Tool normalises to the adjustable target value in accordance with the ITU-R BS.1770-4 standard while simultaneously limiting the True Peak.
Peak limiting: If applying gain to reach −14 LUFS would push the True Peak above −1 dBTP, the gain is automatically reduced until the peak limit is met. The log then shows [PEAK-LIMITED]. This is correct behavior — not an error.
ffmpeg decodes the MP3 losslessly to uncompressed 32-bit float PCM audio in memory.
pyloudnorm measures the integrated loudness (LUFS) and calculates the required gain factor to reach −14 LUFS.
ffmpeg encodes the result at the original bitrate as a new MP3 file.
Note: Re-encoding is technically a generation loss. At high bitrates (192–320 kbps), the quality loss is practically inaudible. For professional purposes, it's best to work with WAV as the source file and perform the MP3 conversion as the final step.
4.2 Selecting Audio Files
Choose Files …: Select individual or multiple audio files via file dialog.
Choose Folder …: Read in a complete folder of audio files.
Choose output folder …: Set the target folder for the normalised copies.
All files are copied to the output folder and normalised there. Your original audio files are not modified.
4.3 Normalisation Parameters
The default values are −14.0 LUFS and −1.0 dBTP. You can adjust these and reset them to defaults by clicking the Reset to Default button.
4.4 Normalise / Analyse
Only by clicking the Normalise Files files button are the files in the output folder actually normalised. The Analyse Files (measure only) option measures the LUFS value and True Peak without writing any changes — useful for checking whether tracks are already at the target value.
4.5 Output
The output log at the bottom shows status messages for each processed file, including measured LUFS values, applied gain, and any errors.
5 Conversion
The Conversion tab converts audio files between the MP3, WAV, and FLAC formats. Accepted input formats: MP3, WAV, FLAC, OGG, M4A, AAC, WMA, AIFF, OPUS.
5.1 Choosing Files
Choose files …: Select individual or multiple audio files.
Choose folder …: Read in a complete folder of audio files.
Choose output folder …: Set the destination folder for the converted files. Originals are not modified.
5.2 Target Format & Bitrate
MP3: Lossy format for maximum compatibility. Selectable bitrate: 128, 192, 256, or 320 kbps.
WAV: Uncompressed format. Highest quality, largest files.
FLAC: Lossless compression. Smaller files than WAV, identical quality. Supported by most modern DJ software.
5.3 Converting
The conversion process starts by clicking Convert files. The conversion is performed without any volume adjustment.
Tip: If you want to combine normalisation and conversion, normalise first (WAV → WAV, normalised), then convert the result to MP3 or FLAC.
6 ID3 Tags
The ID3 Tags navigation item is the heart of the DJ-Tool for managing your music library. Here you can read, edit, automatically fetch, and save metadata — individually or, via the Batch & Export navigation item, for your entire collection.
6.1 What are ID3 Tags?
ID3 tags are metadata containers embedded directly into audio files. They contain information such as title, artist, album, genre, BPM, and key — everything that DJ software, music players, and streaming services need in order to identify and display a track.
Technically we distinguish:
ID3v2.3 (MP3): The most widely used standard in the DJ world. The DJ-Tool reads and writes exclusively in this format for maximum compatibility with all common DJ programs.
RIFF INFO / ID3v2 (WAV): WAV files can also carry ID3 tags. The DJ-Tool supports this fully.
VorbisComment (FLAC, OGG): Metadata format for lossless formats — read via tinytag.
Why are correct ID3 tags important for DJs?
DJ programs display title, artist, BPM, and key directly from the tags.
BPM values in the tag save re-analysis in DJ software.
Key (Camelot) enables harmonic mixing without notes (e.g. A-Minor).
Cover artwork appears on hardware DJ players on the display.
6.2 Loading Audio Files
Here too you can load individual files, multiple files, or an entire folder using the buttons in the file source card:
Choose files …: Load individual or multiple audio files. All formats (MP3, WAV, FLAC, OGG, M4A, AAC, WMA, AIFF, OPUS) are accepted.
Choose folder …: Read in a complete folder of audio files (non-recursive, i.e. only the files directly in the selected folder, not in sub-folders).
After loading, each file appears in the file list on the right. Clicking an entry opens the tag editor on the left with the tags of that file.
6.2.1 File List Colors
The file list colors entries by tag completeness:
Black: Both title and artist tags are present.
Blue: Only one of the two (title or artist) is present.
Red: Neither title nor artist tag is present.
6.2.2 Search and Sorting
Search field: Filters the displayed list by the typed text. All file entries in the full list are searched.
Sort dropdown: Sorts the display by Name, Title, Artist, Album, Album Artist, Year, Track No., Genre, BPM, Key, Energy, Rating, Comment, Camelot.
6.3 Tag Fields in Detail
Under Edit Tags, all available metadata fields are displayed and can be edited directly. If cover artwork is available, it is shown as well.
6.3.1 Title (ID3 Frame: TIT2)
The track title, as it should appear on the display of a hardware DJ player or in the DJ-Software. Use the official release title where possible.
6.3.2 Artist (TPE1)
The main performer of the track. With multiple artists the common format is: "Artist 1 & Artist 2" or "Artist 1, Artist 2".
6.3.3 Album (TALB)
The album or EP name. For single releases: often identical to the title or e.g. "Bassline EP".
6.3.4 Album Artist (TPE2)
Used for compilations or VA albums (Various Artists). Example: "Various Artists" or "DJ Cataclysm".
6.3.5 Year (TDRC)
The release year as a four-digit number, e.g. "2024".
6.3.6 Track No. (TRCK)
Position of the track in the album. Format: "5" or with total count "5/12".
6.3.7 Genre (TCON)
The music genre. Free text. Recommendation: use a consistent spelling, e.g. always "Techno" (not sometimes "techno" or "TECHNO").
6.3.8 BPM (TBPM)
Beats per minute — the tempo of the track. Either entered manually or determined automatically by the BPM detection. Integer value, e.g. "128".
6.3.9 Key (TKEY)
The musical key in standard notation: "C", "C#m", "Dm" etc. The corresponding Camelot code (e.g. "8B") is displayed live next to the field after detection or manual entry.
6.3.10 Energy (TXXX:Energy)
An energy value from 1 to 10 describing the intensity of the track. Stored as a TXXX frame, compatible with Rekordbox, Mixed In Key, and Traktor.
Example: Intro-Track = 2–3, Peak-Time-Banger = 9–10.
6.3.11 Label (TPUB)
The record label of the release, e.g. "Drumcode", "Ninja Tune", "self-released".
6.3.12 Composer (TCOM)
The composer or producer — often identical to the artist, but can differ with remix releases.
6.3.13 Rating (POPM) – Star Rating 1–5
A personal rating of the track from 1 to 5 stars. Stored as a POPM frame (popularimeter), compatible with foobar2000, MusicBee, and other players. Next to the input field, the star display appears automatically, e.g. ★★★☆☆ for 3.
6.3.14 Comment (COMM)
Free-text comment with no fixed format. Examples: "Favourite opener", "Peak time", "Original mix".
6.4 Online Sources: MusicBrainz, Discogs, Spotify
The DJ-Tool can automatically retrieve metadata from three different online databases. The active source is selected via the radio buttons in the Online Source card.
6.4.1 MusicBrainz
MusicBrainz is a free, community-maintained music database. No registration required, no API keys needed. What gets searched: the app sends artist + title – on a match, the title, artist, album, album artist, year, and genre are filled in. Additionally, the app automatically loads the cover artwork from the Cover Art Archive (coverartarchive.org).
Note: MusicBrainz is particularly strong for well-known releases from rock, pop, hip-hop, and classical music. For niche electronic music (white labels, promos) Discogs is often the better choice.
6.4.2 Discogs
Discogs is the world's largest record database, specialising in physical releases. Particularly strong for vinyl, electronic music, and niche genres.
One-time connection via OAuth: Discogs requires a free account and a one- time login in the app (click "Connect Discogs …"). The access token is then stored locally (~/.dj_tool_discogs_token.json).
6.4.3 Spotify
Spotify contains virtually every modern track with the correct title, artist, album, and album cover. Beyond that, the Spotify Web API also provides tempo (BPM) and key via the /v1/audio-features endpoint, which are automatically filled into the corresponding fields.
As a special feature, it's possible to retrieve the ID3 tags via Spotify.
For this you need your own API credentials (Client ID + Client Secret) – each user uses their own free Spotify Developer account. This is required because Spotify's terms of service explicitly prohibit embedding a shared API key in distributed software.
Setting up the Spotify API key (one-time, approx. 2 minutes)
Open developer.spotify.com/dashboard and log in with your Spotify account (free).
Click "Create app".
Enter any app name (e.g. "DJ Tool"), set the Redirect URI to http://localhost, and confirm.
Switch to Settings → copy the Client ID and Client Secret.
In the app, click "Connect Spotify ..." and enter the Client ID and Client Secret.
The credentials are stored locally in ~/.dj_tool_spotify.json and only need to be entered once.
Summary: Spotify provides the title, artist, album, album artist, year, BPM, key, and cover artwork – a complete set of all the important metadata in one step.
6.5 Buttons in Detail
6.5.1 Read Online
Reads the metadata of the currently selected track from the selected online database and fills the editor fields. A results list appears if multiple matches are found — click an entry to apply it.
Important: "Read online" does not change anything in the file. Only "Save" writes the tags permanently into the file. Before every "Read online", an undo snapshot is automatically saved.
6.5.2 Save
Writes all changed fields and the cover artwork as ID3 tags to the file. Before saving a diff dialog shows exactly which fields have changed (before → after). The save can be cancelled at this point.
6.5.3 From Filename
Extracts artist and title from the file name using the pattern "Artist - Title".
Examples
"DJ Cataclysm - Bassline.mp3" → Artist: "DJ Cataclysm", Title: "Bassline"
"01. DJ Cataclysm - Dark Matter.mp3" → Track No.: "01", Artist: "DJ Cataclysm", Title: "Dark Matter"
Useful for folders with poorly tagged tracks where the file name follows the correct pattern "Artist - Title".
BPM + Key Analyse
Analyses the audio of the currently loaded track and determines BPM and key completely locally — no internet connection required.
BPM detection
The audio is downsampled to 22,050 Hz (maximum 90 seconds analysed).
An STFT (Short-Time Fourier Transform) calculates the spectral flux — high values correspond to beats/impulses.
Autocorrelation determines the dominant tempo in the range 60–200 BPM.
Octave resolution: values below 80 BPM are doubled, above 160 BPM halved.
Key detection (Krumhansl-Schmuckler algorithm, 1990)
STFT in the range 65–2100 Hz (relevant fundamentals of most instruments).
Chromagram: 12 chroma classes (one per semitone), averaged across all frames.
Correlation against major and minor profiles → the key with the highest correlation is selected.
Result in standard notation ("C", "F#m" etc.) + Camelot code displayed directly next to it.
Note: BPM and key values initially appear only in the editor. "Save" is needed to write them to the file.
6.5.4 Undo
Undoes the last change in the editor. The app automatically saves snapshots before online reads, "From Filename", and BPM/key analysis (max. 20 steps). Switching to another file clears the undo stack.
6.5.5 Copy Tags / Paste Tags
"Copy Tags" stores all fields and cover artwork in a clipboard. "Paste Tags" applies the clipboard contents to the currently selected file. Useful for applying an identical set of tags to multiple tracks.
6.5.6 Fingerprint Search (AcoustID)
The fingerprint search identifies a track by its sound — regardless of the file name or existing tags. Particularly useful for:
Tracks without any tags ("unknown" files).
Tracks with incorrect or outdated tags.
Own edits/bootlegs of a known original.
Process:
Calculate audio fingerprint: The external tool fpcalc (Chromaprint) analyses the audio file and generates a unique fingerprint. This is independent of volume, bitrate, or small quality differences.
Query the AcoustID database: the fingerprint and file length are sent to the AcoustID API. The database returns matches with a confidence value (0–1). A value above 0.7 is considered reliable.
Resolve MusicBrainz IDs: AcoustID delivers MusicBrainz Recording IDs. These are used to retrieve title, artist, album, and cover from MusicBrainz.
Requirements:
fpcalc (Chromaprint) must be installed separately:
macOS: brew install chromaprint
Windows: download fpcalc.exe from the GitHub releases and place it next to ffmpeg.exe
A personal AcoustID API key is required (free at acoustid.org). It is entered on the first click of the Fingerprint button and stored locally.
Without fpcalc the Fingerprint button remains disabled and is not accessible.
6.6 Cover Artwork
The cover artwork is stored as an APIC frame (Attached Picture) in the ID3 tag. It appears on CDJ displays, in Rekordbox, and in music players.
Automatically via "Read Online" (from MusicBrainz, Discogs, or Spotify).
Manually via "Choose …": Opens a file dialog for JPEG/PNG files. Recommendation: min. 600×600 pixel, under 500KB.
"Remove" deletes the APIC frame from the ID3 tag.
6.7 Listen to Track
With the Play and Stop buttons, you can start or stop a selected song for previewing. The player plays back directly through the default audio device and stops automatically when another file is selected.
Limitation: On ARM64 Macs running Windows (Parallels) no audio interface is available — the player shows "not available" there.
7 Batch & Export
The Batch & Export navigation item contains all the tools that operate on the entire loaded file list. The file list in the ID3 Tags tab is the data source for all batch operations.
On the right side of the Batch tab an overview of the loaded files appears. Clicking an entry switches to the ID3 Tags tab and opens that file.
Important: All batch operations always work on the complete loaded file list, not on a filtered view.
7.1 Online Tagging
7.1.1 Tag All & Save
Performs an automatic online search for each track at the selected online source (MusicBrainz, Discogs, or Spotify) and saves the found metadata directly as ID3 tags. Tracks for which no match is found are skipped.
7.1.2 Cover for All Without Image
Searches automatically for a suitable cover image for tracks without cover artwork and saves it in the ID3 tag. Existing tags are fully preserved. Only tracks without cover are processed.
7.2 Analysis
7.2.1 BPM + Key Analyse
Identical to the single analysis, but for all loaded tracks. The analysis runs in a background thread.
7.2.2 Calculate ReplayGain
ReplayGain is a loudness normalisation standard that does not modify the audio data — instead a gain value is written to the tag. Compatible players (foobar2000, VLC, MusicBee) read this tag and adjust the volume accordingly.
ReplayGain vs. LUFS Normalisation
Permanently changes the audio data.
Suitable for streaming platforms and DJ software that does not support
ReplayGain
Does not change the audio data — only a tag is written.
Only effective in ReplayGain-capable players (foobar2000, VLC, MusicBee, Clementine).
Ideal for normalising a collection without quality loss.
How Is the ReplayGain Calculated?
Reference level: −18 LUFS (ReplayGain 2.0 standard, ITU-R BS.1770-4).
Formula:
replaygain_track_gain = −18 − (measured LUFS of the track) [in dB]
Examples:
Track measures −12 LUFS → Gain = −18 − (−12) = −6.0 dB → player turns down by 6 dB
Track measures −22 LUFS → Gain = −18 − (−22) = +4.0 dB → player turns up by 4 dB
Track measures −18 LUFS → Gain = 0.0 dB → no adjustment
7.2.3 Platform Comparison
Measures the LUFS loudness of each loaded track and shows how much gain each streaming platform would apply.
Spotify: −14 LUFS
Apple Music: −16 LUFS
YouTube: −14 LUFS
Tidal: −14 LUFS
Beatport: −8 LUFS (no automatic loudness management)
SoundCloud: −8 LUFS (no automatic loudness management)
Positive value in the output: platform turns the track up (track quieter than target). Negative value: platform turns the track down (track louder than target).
For Beatport and SoundCloud: since these do not run any automatic loudness management, you hear exactly what was uploaded. Tracks for these platforms should be normalised to −8 to −10 LUFS.
7.3 Batch Rename
Renames all loaded files according to a freely definable scheme.
Examples:
{artist} - {title} → "DJ Cataclysm - Bassline.mp3"
{tracknumber} - {artist} - {title} → "07 - Artist X - My Track.wav"
{bpm}_{artist}_{title} → "128_DJ Cat_Dark Matter.mp3"
Missing tags: If a field is empty, the token is replaced with an empty string. The file extension is always preserved.
Always check the preview! Renaming can be reverted with "Undo rename" (up to 20 steps).
7.4 Set Batch Field
Sets a specific metadata field for all loaded files to the same value. Useful for e.g. setting the genre or year for an entire folder at once. An empty value clears the field.
7.4.1 Genre Normalise
Standardises the spelling of common genre names, e.g.:
"techno" → "Techno"
"DRUM AND BASS" → "Drum and Bass"
"house music" → "House Music"
7.5 Auto-Sort
Automatically sorts the loaded files into sub-folders according to a freely definable schema.
Available tokens:
{genre} → Genre tag, e.g. "Techno"
{artist} → Artist tag
{year} → Year from the date tag, e.g. "2024"
{title} → Title tag
Available tokens in Auto-Sort: {genre}, {artist}, {year}, {title}. No {album}, {tracknumber}, or {bpm}.
7.5.1 Example Schemas and Resulting Folder Structures
{genre}/{artist} → Techno/DJ Cataclysm/Bassline.mp3
{genre}/{year} → Techno/2024/ (all Techno tracks from 2024)
{genre}/{artist}/{year} → Techno/DJ Cataclysm/2024/Bassline.mp3
{year} → all tracks sorted by year only
7.5.2 What happens with missing tags?
Missing genre → folder "Unknown Genre"
Missing artist → folder "Unknown Artist"
Missing year → folder "Unknown Year"
7.5.3 Move vs. Copy
Move: File is removed from the source folder. Use with caution on first use
Copy: File remains in the source folder, additionally placed in the target folder. Recommended for the first trial.
Always check the preview before confirming the operation.
7.6 CSV & Export
7.6.1 CSV Export
Saves all metadata of the loaded tracks as a semicolon-delimited CSV file (UTF-8 with BOM for Excel compatibility).
Columns included: File name · Title · Artist · Album · Album Artist · Year · Track No. · Genre · BPM · Key · Energy · Label · Composer · Rating · Comment
7.6.2 CSV Import
Reads back an edited CSV file. Matching is done by file name. Not all columns need to be present — only the columns found in the CSV are updated.
Typical workflow:
Load tracks, export CSV.
Open CSV in Excel: edit fields (set genre for all tracks, correct year values, fill in missing BPM values).
Import the edited CSV back → all found tracks are updated.
7.6.3 Rekordbox XML
Creates an XML file in DJ_PLAYLISTS format for Pioneer Rekordbox 6. Contains title, artist, BPM, key, and file path. Can be imported into Rekordbox via File → Import → rekordbox XML.
7.6.4 Traktor NML / Serato M3U
Exports a collection for Native Instruments Traktor (NML) or a playlist for Serato DJ (M3U). Both formats are generated from the currently loaded file list.
7.6.5 Stored Tags
The DJ-Tool writes two TXXX frames to the ID3 tags:
replaygain_track_gain: e.g. "-6.00 dB" — the gain value to be applied.
replaygain_track_peak: e.g. "0.950000" — normalised peak value (1.0 = 0 dBFS).
ReplayGain and LUFS normalisation are not mutually exclusive: a track can be normalised to −14 LUFS AND have a ReplayGain tag at the same time. In most DJ setups, LUFS normalisation is the more practical solution.
7.7 Duplicates
Find Duplicates detects duplicate tracks by artist and title (case-insensitive). Duplicates are displayed in a list showing the file paths. Useful for identifying redundant copies in the library.
The tool does not delete any files automatically. The decision of which version to keep remains with the user.
7.8 Harmonic Mix
7.8.1 The Camelot Wheel
The Camelot Wheel assigns each of the 24 musical keys a combination of number (1–12) and letter (A for minor, B for major). Keys with the same number or adjacent numbers are harmonically compatible — mixing between them sounds musical.
Complete mapping (Camelot → Key):
1A
= Am / 1B = C
2A = Em / 2B = G
3A = Bm / 3B = D
4A =
F#m / 4B = A
5A = C#m / 5B = E
6A = G#m / 6B = B
7A =
D#m / 7B = F#
8A = Bbm / 8B = Db
9A = Fm / 9B = Ab
10A
= Cm / 10B = Eb
11A = Gm / 11B = Bb
12A = Dm / 12B = F
7.8.2 Show Camelot Wheel
Opens an interactive Camelot Wheel as a modal window. Outer ring: major (B). Inner ring: minor (A). Orange dots show how many tracks from the loaded list are in each key. Clicking a segment filters the file list to that key.
7.8.3 Harmonic Sort
Sorts the loaded file list by Camelot number (1→12), then letter (B before A). Consecutive tracks are thus harmonically compatible with one another – ideal for setlist planning.
8 File Info
The File Info tab lists technical details of the tracks loaded in the ID3 Tags tab.
Table columns:
File name – full file name.
Format – audio format (MP3, WAV, FLAC etc.).
Sample rate – sampling rate in Hz (e.g. 44,100, 48,000).
Bit depth – resolution in bits (e.g. 16, 24 bits; "–" for MP3).
Channels – 1 = Mono, 2 = Stereo.
Track length – playing time as mm:ss.
Size – file size in MB.
BPM – value from the ID3 tag (TBPM).
Key – value from the ID3 tag (TKEY).
kbps – bitrate (relevant for MP3/AAC).
The table is updated whenever the loaded file list changes. Clicking a column header sorts by that column.
9 Updates
Using the Check for Updates button you can download a newer version of the software. The check queries djcataclysm.com/version.json and compares with the current version.
No newer version available → message "You have the current version".
Newer version available → dialog with version note and download link (djcataclysm.com).
No personal data is transmitted.
9.1 Changelog
A complete overview of all changes per version is available at djcataclysm.com/changelog.html.
9.2 Help
The Help button opens a popup with links to the website and the
manual.
The contact email address is also displayed.
Have fun in the mix!
DJ Cataclysm
10 Third-Party Trademarks and Copyrights
The product and brand names mentioned in this manual are the property of their respective owners. Rekordbox is a registered trademark of Pioneer DJ Corporation. Serato is a registered trademark of Serato Audio Research Ltd. Traktor is a registered trademark of Native Instruments GmbH. Mixed In Key is a trademark of Mixed In Key LLC. Spotify is a registered trademark of Spotify AB. Apple Music and macOS are trademarks of Apple Inc. YouTube is a trademark of Google LLC. Tidal is a trademark of Aspiro AB. SoundCloud is a trademark of SoundCloud Ltd. Beatport is a trademark of Beatport, LLC. Discogs is a trademark of Zink Media, LLC. Windows is a registered trademark of Microsoft Corporation. foobar2000 is a product by Peter Pawlowski.
MusicBrainz and AcoustID are projects of the MetaBrainz Foundation. ffmpeg and Chromaprint are free open-source projects distributed under their respective licenses.
DJ Cataclysm – DJ-Tool is neither affiliated with nor sponsored or endorsed by any of the companies, organizations, or projects mentioned above. All references to third-party brands are made solely for the purpose of describing compatibility and product identification.
Licences and Third-Party Software
Overview
This document lists all software libraries and external services used in the application »DJ Cataclysm – DJ-Tool«. The app runs on macOS (Apple Silicon) and Windows 10/11. For each component, the licence, version, purpose and scope of use are documented.
Features included:
- Loudness normalisation (WAV + MP3)
- Audio conversion (all formats → MP3/WAV/FLAC)
- IID3 tag editor (Title, Artist, Album, Year, Track no., Genre, BPM, Key, Energy, Label (TPUB), Composer (TCOM), Rating (POPM, 1–5 stars), Comment, Cover Art)
- Automatic BPM detection (autocorrelation of onset envelope)
- Automatic key detection (Krumhansl-Schmuckler 1990, chroma profile correlation)
- Batch rename by tag pattern
- Populate fields from filename
- Tag diff before saving
- Batch-set field for all loaded files
- Sort and filter in the file list
- Missing tag highlighting (red/amber/white)
- Cover art display and embedding (APIC frame)
- Automatic cover fetch via Cover Art Archive
- Online tag lookup via MusicBrainz or Discogs (OAuth 1.0a)
- Mini audio player (preview playback in ID3 editor)
- Track duration display in file list
- LUFS analysis without normalisation (measure only, no file change)
- CSV export/import of ID3 tags (Excel-compatible)
- Copy/paste tags between tracks
- Undo for tag changes (up to 20 steps)
- Rekordbox XML export (DJ_PLAYLISTS format, Rekordbox 6)
- Traktor NML export
- Serato M3U export
- Batch & Export tab (batch rename, batch field set, auto-sort, duplicate detection)
- Online tagging via Spotify (Client Credentials)
- AcoustID fingerprint lookup (optional fpcalc binary)
- ReplayGain calculation (ReplayGain 2.0, −18 LUFS reference)
- Platform comparison (Spotify, Apple Music, YouTube, Tidal, Beatport, SoundCloud)
- Camelot Wheel visualisation
- Harmonic sorting by Camelot code
- Genre normalisation
- File Info tab (format, sample rate, bit depth, channels, duration, size)
- Batch cover fetch for all tracks without image
Bilingual interface (DE / EN): language switch via dropdown in the header; setting is stored in ~/.dj_tool_config.json.
Update function: checks for new app versions via the "Check for Updates" button in the header (also in the menu: Help → Check for Updates …). Queries a version JSON on the server via HTTP; if an update is available, the download link is opened in the browser.
From this version onwards, ffmpeg is fully included in the macOS bundle (static arm64 build from imageio-ffmpeg v7.1). No separate installation required.
Component Overview
Component Licence Version Purpose Scope of use
Python 3 PSF License 2.0
3.14.2 (macOS) / 3.12.9 (Windows)
Runtime environment. Standard libraries: tkinter, struct, json, urllib, threading, subprocess, platform, sys, io, hmac, hashlib, base64, secrets, webbrowser.
Fully embedded in the app bundle via PyInstaller. No modifications.
(commercially free)
pyloudnorm MIT License
0.2.0 Loudness measurement and gain calculation per ITU-R BS.1770-4. Target: −14 LUFS / −1 dBTP.
Imported as Python module and embedded in bundle. No modification.
(commercially free)
soundfile BSD 3-Clause
0.13.1 Reading and writing WAV and FLAC audio files as NumPy float arrays.
Imported as Python module and embedded in bundle. No modification.
(commercially free)
numpy BSD 3-Clause
2.4.4 Processing of audio sample arrays (pyloudnorm, soundfile). Used directly for BPM and key detection: autocorrelation, chroma profile correlation (Krumhansl-Schmuckler).
Imported as Python module. No modification.
(commercially free)
scipy BSD 3-Clause
1.17.1 Signal processing for BPM and key detection: STFT (scipy.signal.stft), resampling (resample_poly), correlation (numpy.corrcoef). Already indirectly bundled via pyloudnorm.signal.
Imported as Python module and embedded in bundle. No modification.
(commercially free)
tinytag MIT License
2.2.1 Fallback reading library for metadata (FLAC, OGG, M4A, AIFF). Also reads BPM.
Imported as Python module. No modification.
(commercially free)
sounddevice MIT License
0.5.5 Audio playback in the ID3 tab (mini-player: play, pause, stop, position display). Optional dependency — if absent, a notice is shown instead of the player buttons.
Optional import (_HAS_SD flag). Embedded in bundle if available. No modification.
(commercially free)
Pillow (PIL) HPND License**
12.2.0 Decoding and scaling of JPEG/PNG cover art for thumbnail display in the ID3 editor (128×128 px).
Imported as Python module and embedded in bundle. For UI preview only — APIC raw data storage is performed without
(commercially free)
Pillow.
Spotify Web API Free web service (with registration)
GPL 2.0
7.1 MP3 decoding (PCM pipe), MP3 re-encoding after normalisation, audio conversion (all formats → MP3/WAV/FLAC), bitrate detection.
Static arm64 build, embedded in Contents/Frameworks/ of the macOS bundle. External process via subprocess — no linking, no 'Derived Work'. User can replace the binary (filesystem access possible).
(static build
– compliant implementation
with libx264/x265)
Online lookup of title, artist, album, year, track no., cover art. User enters their own Client ID / Client Secret (Spotify Developer Dashboard).
Source:
imageio-ffmpeg v7.1
HTTP via urllib. Client Credentials Flow (no OAuth token in user account). Rate limit enforced in code. No mass storage. AcoustID API + fpcalc
(Chromaprint) API: free web service, API key required (free of charge).
fpcalc binary: Chromaprint, LGPL 2.1 — optional external dependency. fpcalc is NOT bundled; user installs it separately (macOS: brew install chromaprint; Windows: place fpcalc.exe next to ffmpeg.exe (github.com/acoustid/chromaprint/releases)). Fingerprint calculation via fpcalc (subprocess), lookup via AcoustID API (urllib). No LGPL obligations for our app as there is no linking. Feature remains disabled when fpcalc is not found. ffmpeg (macOS, bundled)
ffmpeg (Windows, included) LGPL 2.1
8.1 Same functions as macOS version. ffmpeg.exe is located next to the app executable in the dist folder. External process via subprocess. User can replace the binary.
(essentials build
from gyan.dev,
without GPL components)
imageio-ffmpeg BSD 2-Clause
0.6.0 Provides the static macOS arm64 ffmpeg build that is embedded in the bundle.
Build process only (binary is copied). imageio-ffmpeg is not imported at runtime and is not
(commercially free)
included in the bundle.
PyInstaller GPL 2.0 with
6.20.0 Builds the macOS .app bundle and the Windows folder from the Python script.
Build process only. Not distributed to end users. Bootloader exception allows proprietary commercial apps.
Bootloader Exception
(commercially free*)
MusicBrainz API Free web service
— Online lookup of title, artist, album, year, track no.
On user interaction only. HTTP via urllib. Rate limit ≥ 1 s enforced in code. User-Agent correctly set.
– compliant implementation
Cover Art Archive API Free web service
— Automatic download of album cover art after successful tag lookup.
On user interaction only. HTTP via urllib. Same User-Agent as MusicBrainz. Errors are handled silently.
– compliant implementation
* GPL Bootloader Exception: allows proprietary commercial apps without source code disclosure.
** HPND (Historical Permission Notice and Disclaimer): OSI-approved permissive licence, comparable to MIT/BSD.
ffmpeg — Embedding and Licence Details
macOS — Static Build in Bundle
From this version, ffmpeg is fully included in the macOS app bundle. No separate installation required.
- Source: imageio-ffmpeg Python package (BSD-2-Clause), version 0.6.0
- ffmpeg binary: v7.1, static arm64 build (Apple Silicon)
- Build configuration: --enable-gpl, incl. libx264/libx265 → GPL 2.0
- Location in bundle: Contents/Frameworks/ffmpeg
- Embedded via PyInstaller: --add-binary "ffmpeg:."
Since ffmpeg is called exclusively as an external process (subprocess), no 'Derived Work' of our application is created. The GPL applies to ffmpeg only.
GPL requirements for distributing the ffmpeg binary:
- Copyright notice: ffmpeg project (ffmpeg.org) with copyright attribution
- Licence: GPL 2.0, accessible at https://www.gnu.org/licenses/gpl-2.0.html
- Source code: available at https://ffmpeg.org/download.html
- Replaceability: users can replace the binary in Contents/Frameworks/
Windows — LGPL Build Included
On Windows, ffmpeg.exe is distributed together with the application in the distribution folder. The app searches for ffmpeg in the following priority order:
1. Next to the executable (dist folder) — preferred path 2. System PATH: winget install Gyan.FFmpeg 3. Known paths: C:\ffmpeg\bin\ffmpeg.exe C:\Program Files\ffmpeg\bin\ffmpeg.exe
The included build is from gyan.dev (Gyan Deshpande), LGPL 2.1 'essentials' (without GPL components such as libx264). LGPL requirement: user can replace ffmpeg.exe — ensured by the separate file in the dist folder.
ffmpeg Detection in Code
_find_ffmpeg() searches in the following priority order (when started as bundle):
1. Contents/Frameworks/ (macOS .app — --add-binary target)
2. sys._MEIPASS/ (PyInstaller _internal/)
3. next to sys.executable (Windows: user places ffmpeg.exe alongside)
4. shutil.which('ffmpeg') (system PATH)
5. Known paths (Homebrew, C:\ffmpeg\bin\, ...)
Platform Abstraction in Code
Platform differences are controlled via constants at the top of the file:
_WINDOWS = platform.system() == 'Windows'
FONT_UI = 'Segoe UI' if _WINDOWS else 'Helvetica Neue'
FONT_MONO = 'Consolas' if _WINDOWS else 'Menlo'
Build Process
macOS (must be performed on a Mac with Apple Silicon):
python3 -m PyInstaller --windowed --name "DJ Cataclysm - DJ- Tool" --onedir \
--add-binary "ffmpeg:." [--exclude-module ...] normalize_gui.py
Windows (must be performed on a Windows machine):
python -m PyInstaller --noconsole --name "DJ Cataclysm - DJ- Tool" --onedir ^
--version-file version_info.txt [--exclude-module ...] normalize_gui.py
After the Windows build: copy ffmpeg.exe (LGPL build from gyan.dev) into dist\DJ Cataclysm - DJ-Tool\.
MusicBrainz and Cover Art Archive — Terms of Use
MusicBrainz API
The MusicBrainz API is free and commercially usable. Requirements implemented:
- User-Agent:
_MB_UA = "DJ_Cataclysm_-_DJ-Tool_v1.0.0 (dj.cataclysm.contact@gmail.com)"
- Rate limiting: max. 1 request/second, enforced in code (single lookup + batch).
- Data storage: tags stored locally in user files only. No cache, no database, no upload.
- Commercial use: permitted per musicbrainz.org/doc/About/Data_License.
Cover Art Archive API
The Cover Art Archive (coverartarchive.org) is queried automatically after a successful MusicBrainz lookup:
- Endpoint: https://coverartarchive.org/release/{release_id}/front
- User-Agent: identical to MusicBrainz requests.
- Error handling: HTTP 404 or timeout are handled silently.
- Storage: cover is written as an APIC frame into the audio file only when the user explicitly clicks »Save«.
Note on copyright: album cover art is protected by copyright. Embedding it in personal music files is standard practice for tag editors (iTunes, foobar2000, MusicBrainz Picard). Responsibility lies with the end user.
Discogs API
The Discogs API is used as an alternative to MusicBrainz for online tag lookup and cover art download. It requires OAuth 1.0a authentication:
- Authentication: OAuth 1.0a desktop PIN flow (oob callback). Consumer key/secret stored in the app. Access token is saved locally in ~/.dj_tool_discogs_token.json after initial login.
- OAuth implementation: fully implemented using the Python standard library (hmac, hashlib, base64, secrets) — no additional OAuth library required.
- Rate limiting: ≥ 1 request/second enforced in code (_discogs_last_req).
- User-Agent: _DISCOGS_UA korrekt gesetzt.
- Data storage: tags stored locally in user files only. OAuth token locally in ~/.dj_tool_discogs_token.json. No cache, no database, no upload.
- Terms of use: Discogs API permits commercial use with correct OAuth authentication and adherence to rate limits.
Overall Assessment for Commercial Distribution
- Bundled libraries (pyloudnorm, soundfile, numpy, scipy, tinytag, Pillow, sounddevice): MIT/BSD/HPND — no copyleft obligations, unrestricted commercial use.
- ffmpeg macOS (GPL, bundled): subprocess call only, no linking → no 'Derived Work', our app code is not subject to GPL. GPL obligations met: licence notice, source code link, binary replaceable.
- ffmpeg Windows (LGPL, included): no linking → no 'Derived Work'. LGPL requirement: replaceable ffmpeg.exe in dist folder ensured.
- imageio-ffmpeg: BSD-2-Clause, build tool only, not included in bundle.
- PyInstaller: build tool only, bootloader exception allows proprietary distribution.
- Pillow: HPND, unrestricted commercial use, fully embedded in bundle.
- MusicBrainz API: fully compliant (User-Agent, rate limiting, no mass storage).
- Cover Art Archive: technically compliant. Copyright of images remains with the respective rights holder — responsibility lies with the end user (standard practice for tag editors).
- Discogs API: compliant (OAuth 1.0a, rate limiting ≥ 1 s, User-Agent, token stored locally). Commercial use permitted per terms of use.
- Update-Funktion (Schaltfläche in der Kopfzeile + Menüpunkt Hilfe → Auf Updates prüfen …): Verwendet ausschließlich Python-Standardbibliothek (urllib, json, webbrowser, threading) — keine neue Abhängigkeit, keine Copyleft- Pflichten. paramiko (LGPL 2.1) wird nur im Entwickler-Upload-Skript genutzt, nicht ins App-Bundle eingebettet und nicht an Endnutzer weitergegeben. Kein Lizenz-Hindernis. • BPM- und Tonart-Erkennung: Vollständig implementiert mit numpy (BSD) und scipy (BSD) — kein proprietäres Modell, keine neue Abhängigkeit mit Copyleft-Pflichten. Algorithmus: Krumhansl-Schmuckler- Schlüsselprofil-Korrelation (1990, public domain). TKEY-Frame nach ID3v2.3- Standard. Kein Lizenz-Hindernis. • Spotify API: kein proprietäres SDK verwendet; nur urllib (Standardbibliothek). Keine Copyleft-Pflichten. API-Nutzung erfordert Nutzer-eigene Credentials (kein App-eigener Key). Konform mit Spotify Developer ToS für persönliche/nicht-kommerzielle Nutzung. • AcoustID API: kostenloser Webdienst, API-Key vom Nutzer einzutragen. fpcalc (Chromaprint, LGPL 2.1): nur externer Prozessaufruf (subprocess), kein Linking → kein Derived Work, keine LGPL-Pflicht für unsere App. Feature ist optional und ohne fpcalc nicht zugänglich. Kein Lizenz-Hindernis. • ReplayGain, Plattform- Vergleich, Camelot-Rad, Harmonic Sort, Genre normalisation, Auto-Sortierung, Duplikate-Erkennung: Vollständig mit numpy (BSD), scipy (BSD), soundfile (BSD), Python-Standardbibliothek implementiert. Keine neuen Abhängigkeiten, keine neuen Lizenz-Pflichten.
- CSV export/import, copy/paste tags, undo, Rekordbox XML export, LUFS analysis, mini audio player, track duration, Discogs OAuth: fully implemented with the Python standard library (csv, xml.etree.ElementTree) and already- licensed dependencies (pyloudnorm, numpy, scipy, soundfile). No new libraries, no new licence obligations.
Overall verdict: No licence-related obstacles for commercial sale as proprietary closed-source software on macOS and Windows.