Repository navigation
Installing
- macOS 15 or newer on Apple Silicon
-
ffmpeg(providesffmpegandffprobe) and ImageMagick (magick) - macOS system
awkandsed(already present)
brew install ffmpeg imagemagickThen confirm everything converter needs is actually usable:
./converter -doctor-doctor goes further than checking the binaries exist — it verifies the ffmpeg filters (loudnorm, astats, volumedetect, setparams, bass) and encoders (alac, plus the video ladders) that the pipeline depends on, checks directory permissions, and reports free space.
A prebuilt Apple Silicon binary named converter ships at the repository root, so cloning is enough
to start. The current version is 1.1 — see VERSION.
The same binary is attached to every GitHub release
together with converter.sha256. Verify a download before running it:
shasum -a 256 -c converter.sha256The binary is Apple Silicon (arm64) only, ad-hoc signed and not notarized, so macOS quarantines
it. Once the checksum verifies, clear the flag with xattr -dr com.apple.quarantine ./converter.
To build it yourself you need Swift tools 6.4 or newer (Xcode 27):
swift build --package-path Sources -c release
# Swift 6.4 moved the products, so ask SwiftPM where they are instead of hardcoding the path.
cp "$(swift build --package-path Sources -c release --show-bin-path)/converter" ./converter
chmod +x ./converterThe Swift package lives in Sources/, so every SwiftPM command needs --package-path Sources.
The release build is deliberately CPU-generic so one binary runs on every Apple Silicon generation. Targeting a specific chip measured no faster and would restrict which Macs can run it.
Converter does not install anything by default. A missing tool produces an error telling you exactly what to brew install.
If you would rather it handle setup itself:
CONVERTER_AUTO_INSTALL_DEPS=1 ./converter -fullThat opts you into two behaviours:
-
brew installis run for each missing formula -
if Homebrew itself is absent, converter downloads and executes the official Homebrew install script (
curl … | bash), which runs remote code on your machine
Leave the variable unset on any machine where that is not acceptable.
| Path | Purpose |
|---|---|
Output/ |
Input and output directory. Non-recursive; clear it between runs |
config.txt |
Quality, render and loudness settings — see Configuration |
album.txt |
Track order for -wavtoalbum and -mp3toalbum
|
converter |
The binary |
| Variable | Effect |
|---|---|
SRC_DIR, OUT_DIR, OUTPUT_DIR
|
Override input/output directories (same as --src-dir, --out-dir, --output-dir) |
CONFIG_FILE |
Use a different settings file |
CONVERTER_AUTO_INSTALL_DEPS |
Set to 1 to opt into dependency auto-install |
DEBUG |
Set to 1 for verbose logging (same as --debug) |
CONVERTER_ROOT, CONVERTER_NAME
|
Override the resolved project root and program name |
Any config.txt key can also be set as an environment variable and takes precedence over the file.