DJ Cataclysm – DJ-Tool v1.0.0 ShopProduct page DEEN

1 System Requirements and Limitations

1.1 System Requirements

ffmpeg is fully included in the app bundle. No additional software needs to be installed.

1.2 Limitations

2 Installation

2.1 Installation macOS

xattr -cr "/Applications/DJ Cataclysm - DJ-Tool.app"

ffmpeg is fully included in the app bundle (Contents/Frameworks/ffmpeg). No further software needs to be installed.

2.2 Installation Windows

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..

The tab bar contains the following 6 menu items:

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:

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.

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.

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

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

5.2 Target Format & Bitrate

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:

Why are correct ID3 tags important for DJs?

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:

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:

6.2.2 Search and Sorting

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)

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

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

Key detection (Krumhansl-Schmuckler algorithm, 1990)

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:

Process:

Requirements:

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.

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

ReplayGain

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:

7.2.3 Platform Comparison

Measures the LUFS loudness of each loaded track and shows how much gain each streaming platform would apply.

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:

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.:

7.5 Auto-Sort

Automatically sorts the loaded files into sub-folders according to a freely definable schema.

Available tokens:

Available tokens in Auto-Sort: {genre}, {artist}, {year}, {title}. No {album}, {tracknumber}, or {bpm}.

7.5.1 Example Schemas and Resulting Folder Structures

7.5.2 What happens with missing tags?

7.5.3 Move vs. Copy

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:

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 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:

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 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:

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.

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:

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:

_MB_UA = "DJ_Cataclysm_-_DJ-Tool_v1.0.0 (dj.cataclysm.contact@gmail.com)"

Cover Art Archive API

The Cover Art Archive (coverartarchive.org) is queried automatically after a successful MusicBrainz lookup:

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:

Overall Assessment for Commercial Distribution

Overall verdict: No licence-related obstacles for commercial sale as proprietary closed-source software on macOS and Windows.

↑ Back to top