Skip to main content

Audio file auto-tagger

Project description

CI/CD PyPI version Python 3.10+

TruMusic

A command-line utility for downloading music from YouTube Music and automatically tagging audio files with metadata and album artwork.

Features

  • Download albums from YouTube Music with a simple search or direct link
  • Automatic ID3/MP4 tagging with artist, album, track info, and cover art
  • Beautiful terminal UI with progress tracking
  • Support for MP3 and M4A formats
  • Retry logic for failed downloads
  • Dry-run mode for testing
  • Configurable via config file

Installation

pip install TruMusic

Requirements

  • Python 3.10+
  • FFmpeg (for audio conversion)

Installing FFmpeg

macOS:

brew install ffmpeg

Ubuntu/Debian:

sudo apt install ffmpeg

Windows: Download from ffmpeg.org and add to PATH.

Usage

Download an Album

Search by artist and album name:

trumusic -a "artist name" -t "album title"

Or use a direct YouTube Music album link:

trumusic -l "https://music.youtube.com/playlist?list=OLAK5uy_..."

Interactive Mode

Just run without arguments to be prompted:

trumusic

Options

-a, --artist              Filter by artist name
-t, --title               Filter by album title (optional)
-l, --link                Direct YouTube Music album/playlist link
-f, --file_format         Output format: mp3 or m4a (default: mp3)
-d, --dry_run             Preview without downloading
-q, --quiet               Skip prompts, use defaults
-v, --verbose             Enable verbose logging
--cookies-from-browser    Extract cookies from browser (local machine only)
                          Supported: chrome, firefox, safari, edge, brave, opera, chromium

Clean Existing Tags

Remove and normalize tags on existing audio files in the current directory:

trumusic_cleanup

Configuration

Create ~/.config/trumusic/config.toml for persistent settings:

# TruMusic Configuration

base_dest_dir = "~/Music/TruMusic"
oauth_file = "~/.config/ytmusicapi/oauth.json"
cookie_file = "~/.config/yt-dlp/cookies.txt"
default_format = "mp3"
max_retries = 3
request_timeout = 30
retry_delay = 5

# Browser to extract cookies from (for age-restricted content)
# Only works when running locally, not on remote servers
# cookies_from_browser = "chrome"

Age-Restricted Content

Some tracks require YouTube authentication to download (age-restricted or explicit content). TruMusic will automatically detect these and provide instructions.

Option 1: Cookie File (works on remote servers)

  1. Install a browser extension to export cookies:

    • Chrome: "Get cookies.txt LOCALLY" or "EditThisCookie"
    • Firefox: "cookies.txt"
  2. Log into YouTube/YouTube Music in your browser

  3. Export cookies for youtube.com to a file

  4. Copy the file to ~/.config/yt-dlp/cookies.txt (or specify a custom path in config)

Option 2: Browser Cookies (local machine only)

Use the --cookies-from-browser flag:

trumusic -a "artist" --cookies-from-browser chrome

Or set it in your config file:

cookies_from_browser = "chrome"

Supported browsers: chrome, firefox, safari, edge, brave, opera, chromium

Authentication

On first run, TruMusic will open a browser window to authenticate with YouTube Music. The OAuth token is saved to ~/.config/ytmusicapi/oauth.json.

For age-restricted content, you may need to provide cookies:

  1. Export cookies from your browser using an extension
  2. Save to ~/.config/yt-dlp/cookies.txt

Development

Setup

git clone https://github.com/jacobtruman/TruMusic.git
cd TruMusic
pip install -e ".[dev]"

Running Tests

pytest

Linting

ruff check .
ruff format .

License

MIT License - see LICENSE for details.

Contributing

Contributions are welcome! Please open an issue or submit a pull request.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

trumusic-1.3.11.tar.gz (21.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

trumusic-1.3.11-py3-none-any.whl (18.4 kB view details)

Uploaded Python 3

File details

Details for the file trumusic-1.3.11.tar.gz.

File metadata

  • Download URL: trumusic-1.3.11.tar.gz
  • Upload date:
  • Size: 21.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for trumusic-1.3.11.tar.gz
Algorithm Hash digest
SHA256 b8f01fd2a91189b2554f1cbe12ec7f8842da0868d2b162a13747c85997acbd76
MD5 d89b3b5d5c38b0698f6fbc1c99fc038c
BLAKE2b-256 2740e8df800f24e10ac9225d2393dc791c0072ea4d51618b4956a21f54393ec7

See more details on using hashes here.

Provenance

The following attestation bundles were made for trumusic-1.3.11.tar.gz:

Publisher: python-publish.yml on jacobtruman/TruMusic

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file trumusic-1.3.11-py3-none-any.whl.

File metadata

  • Download URL: trumusic-1.3.11-py3-none-any.whl
  • Upload date:
  • Size: 18.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for trumusic-1.3.11-py3-none-any.whl
Algorithm Hash digest
SHA256 a20f28c6b2682b58e1d92b24ad673e6410065358052a6caf03237bb089d9df27
MD5 074c9f1d06a51e6960c20a7096f8efe6
BLAKE2b-256 117f1a470442f46548dba260b290c7e9a2c7831663474232905fa43f18dc8eed

See more details on using hashes here.

Provenance

The following attestation bundles were made for trumusic-1.3.11-py3-none-any.whl:

Publisher: python-publish.yml on jacobtruman/TruMusic

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page