C++ 20 / Rust library for audio tagging using a metadata markup format and a Wizard to aid in creating the format.
- Manage multiple albums and tracks via a single Markup config file
- Batch re-encode audio files (WAV, FLAC, MP3, etc.) with consistent quality
- Auto-apply metadata tags (title, artist, album, track number, year, genre, copyright)
- Keep a structured workflow for mastering projects
- Windows: 64-bit installers on the Releases page
- Windows / macOS / Linux: 64-bit artifacts from the latest GitHub Actions build: Rust C++
- Build from source: See below
- ffmpeg in your system PATH (
ffmpeg -version) – Download here - For building: CMake 3.10+, C++20 compiler, Cargo/Rust, 64-bit system recommended
git clone --depth=1 https://github.com/DanielLMcGuire/Mastering_Utility.git
cd Mastering_Utility
# C++
cmake -S . -B build (-G Ninja)
cmake --build build (--config[Release|Debug|MinSizeRel|RelWithDebInfo])
# Rust
cargo buildcd build
Interactive Markup creator / editor.
# Create new configuration
./masteringwizard --Markupfile="output.mas"
# Show help
./masteringwizard --helpPrompts for:
- Album metadata (title, artist, genre, year, copyright, art)
- Output directory
- Songs (source file, title, artist, track number, output file)
- Audio codec settings
Tip
Type exit or quit anytime to leave the wizard.
Processes the Markup file and encodes all tracks.
./masteringutility --markupfile="myalbum.mas"It will:
- Read album/song metadata
- Create output directories
- Re-encode tracks via ffmpeg
- Apply all metadata tags
album 1 ("Album Title", "Artist Name", "© 2025 Copyright", "cover.jpg", "./source", "./output", "Genre", "2025", "Comment", "Flags")
{
song 1 ("Track Title", "Artist Name", 1, "input.wav", "01-track.mp3", "libmp3lame", "Genre", "2025", "Comment")
song 2 ("Another Track", "Artist Name", 2, "input2.flac", "02-track.flac", "flac", "Genre", "2025", "Comment", "-compression_level 12")
}Album syntax:
album <ID> ("Title", "Artist", "Copyright", "AlbumArtPath", "SourcePath", "OutputPath", "Genre", "Year", "Comment", "Flags")Song syntax:
song <ID> ("Title", "Artist", TrackNumber, "SourceFile", "OutputFile", "Codec", "Genre", "Year", "Comment", "Flags")Comments = Optional, Comment metadata
Flags = Optional, Flags to pass to ffmpeg, must have optional comment field specified if flags are specified, even if it is empty.
Supported codecs: Any ffmpeg audio codec, including:
mp3– MP3 (VBR quality 3 default)flac– FLAC lossless (compression 12 default)aac– AAClibopus– Opuscopy– Copy stream without re-encoding
Run ffmpeg --codecs to see more
./masteringwizard
./masteringutility new.masWizard will prompt for album/song info and generate a ready-to-use Markup file.
- 90%+ of code written manually
- GitHub Actions/workflows partially AI-generated (checked)
- Issue responses manually written
(autogenerated)tag marks AI-generated issues
GPL 3.0 See LICENSE for details.
Issues and PRs welcome.
Use the GitHub Issues page for questions or feature requests.