amdl

Audio Metadata & Lyrics Maintainer: one uniform Opus library with complete tags, cover art and synced lyrics, kept consistent as it grows.

brew trust --tap jakobhviid/tapbrew install jakobhviid/tap/amdl

Install Read the README

macOS and Linux, x86_64 and arm64 · a single self-contained binary · MIT licensed

What it does

amdl is the maintenance layer for a collection you already own: MP3s, m4a and CD rips with patchy tags, gathered over years. Source folders are treated as read-only input and everything is written to an output library, ready for a self-hosted server such as Navidrome.

Convert to Opus with fidelity

convert transcodes .m4a, .mp3 and .flac to Opus, re-embeds the source cover so players show it, strips iTunes junk tags and mirrors .lrc files. It skips what exists, so an interrupted run resumes.

Tags and cover art

identify fixes untagged tracks by sound (an AcoustID fingerprint) and writes only confident matches. covers fills missing art from the source, a sibling library, online sources, then a URL you paste. tag groups compilations.

Synced lyrics

lyrics fetches synced or plain lyrics from LRCLIB as .lrc files, re-times plain ones when a synced version appears, and can embed them in the file. With a whisper.cpp endpoint set, it generates synced lyrics from plain ones.

Checks, and a way back

doctor finds missing covers and tags, truncated and corrupt files; dedup lists duplicates without deleting. Every mutating run is journaled, and undo reverts a run without touching edits made since. Each batch command takes --json.

A first look

A typical first pass, from the README: set the paths once, convert, see what still needs fixing, then backfill lyrics. amdl --llm prints the whole guide for an AI agent.

$ amdl config --init                         # optional: set default source/output once
$ amdl convert ~/Music/originals ~/Music/lib # m4a/mp3 → Opus (covers, lyrics, junk-stripped)
$ amdl doctor ~/Music/lib --source ~/Music/originals   # what still needs fixing
$ amdl doctor ~/Music/lib --json | jq '.truncated'     # feed a script/agent
$ amdl lyrics ~/Music/lib                    # backfill synced .lrc from LRCLIB
$ amdl undo                                  # revert the last run

Install

Homebrew, on macOS and Linux

Pours a prebuilt bottle on macOS and x86_64 Linux, so no compiler is needed. Pulls in gamdl and ffmpeg as dependencies. The tap is trusted once first, as Homebrew 6 and later ask.

brew trust --tap jakobhviid/tapbrew install jakobhviid/tap/amdl

Or one line, without Homebrew

No compiler and no root: installs to ~/.local/bin. It fetches only the amdl binary, so install gamdl and ffmpeg separately.

curl -fsSL https://raw.githubusercontent.com/jakobhviid/amdl/main/install.sh | sh

Or build from source

Needs Rust. The binary lands in ./target/release/amdl.

cargo build --release

Runtime dependencies

ffmpeg and ffprobe for transcoding and checks, fpcalc (Chromaprint) for identify, and gamdl for the optional download and recover --online commands. amdl is a maintainer, not a downloader: acquisition is gamdl's job, and amdl only thin-wraps a slice of it. Install and use gamdl per its own documentation, terms and your local laws; that part is at your own risk.

Documentation

  • README: every command, the common flags and installation
  • WORKFLOWS.md: end-to-end recipes for building, scanning, covers, identify, recover, de-dup and undo
  • Releases