Skip to main content

Extract music file metadata for Soundiiz import

Project description

MusicList for Soundiiz ๐ŸŽต

CI Python 3.8+ License: MIT Code style: black

Professional command-line tool for extracting music file metadata for Soundiiz import.

โœจ Features

  • ๐ŸŽต Multi-Format Support - AAC, AU, FLAC, MP3, OGG, M4A, WAV, WMA
  • ๐Ÿ“Š Multiple Export Formats - CSV (Soundiiz), JSON, M3U, TXT
  • ๐Ÿ” Intelligent Metadata Extraction - Reads tags and parses filenames (format: "Artist - Title")
  • ๐Ÿ“ Recursive Scanning - Automatically searches all subdirectories
  • ๐Ÿ”„ Automatic File Splitting - Splits large playlists into multiple files (configurable)
  • ๐Ÿ”Ž Duplicate Detection - Automatically finds and removes duplicate songs
  • ๐Ÿ“ฆ Batch Processing - Process multiple directories simultaneously
  • ๐Ÿ›ก๏ธ Robust Error Handling - Skips problematic files and continues processing
  • โœ… Production-Ready - Fully tested with comprehensive test suite
  • ๐ŸŒ Unicode Support - Correct handling of special characters
  • ๐Ÿ“ Detailed Logging - Verbose mode for debugging

๐Ÿ“‹ Table of Contents

๐Ÿš€ Installation

Option 1: PyPI (Recommended - Easiest!)

# Install from PyPI
pip install musiclist-for-soundiiz

# That's it! Start using it:
musiclist-for-soundiiz -i ~/Music -o output.csv

# Or launch the GUI:
musiclist-for-soundiiz-gui

Prerequisites: Python 3.8 or higher

For GUI support on Linux:

sudo apt-get install python3-tk  # Ubuntu/Debian

Option 2: Docker (No Python Required!)

# Quick start with Docker
docker build -t musiclist-for-soundiiz .

docker run --rm \
  -v /path/to/music:/music:ro \
  -v $(pwd)/output:/output \
  musiclist-for-soundiiz \
  -i /music -o /output/playlist.csv

๐Ÿ“– See DOCKER.md for complete Docker guide

Option 3: From Source (Development)

Prerequisites

  • Python 3.8 or higher
  • Tkinter (for GUI, optional):
    • Ubuntu/Debian: sudo apt-get install python3-tk
    • macOS: Pre-installed with Python
    • Windows: Pre-installed with Python

Install

# Clone the repository
git clone https://github.com/lucmuss/musiclist-for-soundiiz.git
cd musiclist-for-soundiiz

# Create virtual environment (recommended)
python3 -m venv venv
source venv/bin/activate  # On Windows: venv\Scripts\activate

# Install package
pip install -e .

# Or with development dependencies
pip install -e ".[dev]"

โšก Quick Start

GUI Version (Recommended for Beginners)

# Launch the graphical interface
musiclist-for-soundiiz-gui

Features:

  • ๐Ÿ–ฑ๏ธ Easy drag-and-drop interface
  • ๐Ÿ“Š Real-time progress tracking
  • ๐ŸŽจ Visual duplicate detection
  • โœ… No command line knowledge required

Command Line Version

# Scan music files and export as CSV
musiclist-for-soundiiz -i /path/to/music -o output.csv

# Result: output.csv (ready for Soundiiz import)

๐Ÿ“š Usage Examples

๐Ÿ–ฅ๏ธ GUI Application

The easiest way to use MusicList for Soundiiz:

# Start the GUI
musiclist-for-soundiiz-gui

GUI Features:

  1. Add Directories: Click "Add Directory" to select music folders
  2. Choose Output: Select file name and format (CSV, JSON, M3U, TXT)
  3. Options: Enable duplicate detection, recursive scanning
  4. Process: Click "Process Files" and watch the progress
  5. Done: Get visual confirmation and find your exported file

Perfect for users who prefer a visual interface over command line!

๐ŸŽฏ Command Line - Basic Usage

# Scan directory and create CSV
musiclist-for-soundiiz -i /music/library -o soundiiz.csv

๐Ÿ“ Different Export Formats

# CSV export (default, for Soundiiz)
musiclist-for-soundiiz -i /music -o playlist.csv -f csv

# JSON export (with all metadata)
musiclist-for-soundiiz -i /music -o playlist.json -f json

# Create M3U playlist
musiclist-for-soundiiz -i /music -o playlist.m3u -f m3u

# Simple text list (Title - Artist)
musiclist-for-soundiiz -i /music -o playlist.txt -f txt

๐ŸŽจ Filter by File Type

# Only MP3 and FLAC files
musiclist-for-soundiiz -i /music -e .mp3 .flac -o output.csv

# Only OGG files
musiclist-for-soundiiz -i /music -e .ogg -o ogg_files.csv

๐Ÿ“ Non-Recursive Scanning

# Only current directory (no subdirectories)
musiclist-for-soundiiz -i /music --no-recursive -o output.csv

๐Ÿ”ง Customize File Splitting

# Maximum songs per file
musiclist-for-soundiiz -i /music -o output.csv --max-songs-per-file 200

# For more than 200 songs, multiple files are created:
# output_1.csv, output_2.csv, output_3.csv, ...

๐Ÿ” Verbose Mode (Debugging)

# Detailed output for debugging
musiclist-for-soundiiz -i /music -o output.csv -v

# Or completely silent (errors only)
musiclist-for-soundiiz -i /music -o output.csv -q

๐Ÿ“ฆ Batch Processing (Multiple Directories)

# Process multiple directories simultaneously
musiclist-for-soundiiz -i /music/rock /music/pop /music/jazz -o all_music.csv

# Combine music from different sources
musiclist-for-soundiiz -i /external_hdd/music /nas/music /downloads/music -o combined.csv

๐Ÿ”Ž Duplicate Detection

# Detect duplicates and create report
musiclist-for-soundiiz -i /music --detect-duplicates -o output.csv

# Detect duplicates and save to file
musiclist-for-soundiiz -i /music --detect-duplicates --duplicate-report duplicates.txt -o output.csv

# Automatically remove duplicates (keep first copy)
musiclist-for-soundiiz -i /music --remove-duplicates -o output.csv

# Remove duplicates (keep last copy)
musiclist-for-soundiiz -i /music --remove-duplicates --duplicate-strategy keep_last -o output.csv

# Remove duplicates (keep shortest path)
musiclist-for-soundiiz -i /music --remove-duplicates --duplicate-strategy keep_shortest_path -o output.csv

โš™๏ธ Configuration

Command-Line Options

Option Description Default
-i, --input Path(s) to music director(y/ies) Required
-o, --output Output file path output.csv
-f, --format Export format (csv/json/m3u/txt) csv
-e, --extensions File extensions to filter All supported
--no-recursive Don't scan subdirectories false
--max-songs-per-file Max songs per file 200
--no-pretty-json Compact JSON (no indentation) false
--detect-duplicates Detect and display duplicates false
--remove-duplicates Remove duplicates from export false
--duplicate-strategy Strategy (keep_first/keep_last/keep_shortest_path) keep_first
--duplicate-report Save duplicate report to file -
-v, --verbose Enable verbose logging false
-q, --quiet Only show errors false
--version Show version -

๐Ÿ“„ Export Formats

CSV (Soundiiz-compatible)

title,artist,album,isrc,
Song Title,Artist Name,Album Name,,
Another Song,"Artist, with comma",Album 2,,

Note: The trailing comma is part of the Soundiiz specification.

JSON

{
  "total_songs": 2,
  "songs": [
    {
      "title": "Song Title",
      "artist": "Artist Name",
      "album": "Album Name",
      "isrc": "",
      "genre": "Rock",
      "year": "2020",
      "duration": "180",
      "file_path": "/path/to/song.mp3",
      "filename": "song.mp3"
    }
  ]
}

M3U (Playlist)

#EXTM3U
#EXTINF:180,Artist Name - Song Title
/path/to/song.mp3

TXT (Simple List)

Song Title - Artist Name
Another Song - Another Artist

๐ŸŽต Soundiiz Import

Step-by-Step Guide

  1. Create CSV file:

    musiclist-for-soundiiz -i /path/to/music -o my_music.csv
    
  2. Go to Soundiiz:

  3. Start Import:

    • Click "Import"
    • Select "CSV File"
    • Upload your my_music.csv
  4. Export to Streaming Service:

    • Select target platform (Spotify, Apple Music, etc.)
    • Confirm export

Supported Audio Formats

โœ… AAC (.aac) - Advanced Audio Coding
โœ… AU (.au) - AU Audio File
โœ… FLAC (.flac) - Free Lossless Audio Codec
โœ… MP3 (.mp3) - MPEG Audio Layer III
โœ… OGG (.ogg) - OGG Vorbis
โœ… M4A (.m4a) - MPEG-4 Audio
โœ… WAV (.wav) - Waveform Audio File
โœ… WMA (.wma) - Windows Media Audio

๐Ÿ’ป Development

Setup Development Environment

# Clone repository
git clone https://github.com/lucmuss/musiclist-for-soundiiz.git
cd musiclist-for-soundiiz

# Create virtual environment
python3 -m venv venv
source venv/bin/activate

# Install development dependencies
pip install -e ".[dev]"

Code Quality

# Format code
black src tests

# Sort imports
isort src tests

# Linting
flake8 src tests --max-line-length=100

# Type checking
mypy src

๐Ÿงช Testing

Run Tests

# Run all tests
pytest

# With coverage report
pytest --cov=musiclist_for_soundiiz --cov-report=html

# Specific test file
pytest tests/test_extractor.py

# Verbose mode
pytest -v

Test Coverage

The project has a comprehensive test suite:

  • โœ… Unit tests for all formats (AAC, AU, FLAC, MP3, OGG)
  • โœ… Tests for all export formats (CSV, JSON, M3U, TXT)
  • โœ… Tests for error handling
  • โœ… Tests for edge cases (special characters, Unicode, etc.)
  • โœ… Tests for recursive/non-recursive scanning
  • โœ… Tests for duplicate detection
  • โœ… Tests for batch processing

๐Ÿ“Š Project Structure

musiclist-for-soundiiz/
โ”œโ”€โ”€ src/
โ”‚   โ””โ”€โ”€ musiclist_for_soundiiz/
โ”‚       โ”œโ”€โ”€ __init__.py
โ”‚       โ”œโ”€โ”€ cli.py                 # Command-line interface
โ”‚       โ”œโ”€โ”€ extractor.py           # Metadata extraction
โ”‚       โ”œโ”€โ”€ exporter.py            # Export functionality
โ”‚       โ””โ”€โ”€ duplicate_detector.py  # Duplicate detection
โ”œโ”€โ”€ tests/
โ”‚   โ”œโ”€โ”€ __init__.py
โ”‚   โ”œโ”€โ”€ test_extractor.py          # Extractor tests
โ”‚   โ”œโ”€โ”€ test_exporter.py           # Exporter tests
โ”‚   โ”œโ”€โ”€ test_duplicate_detector.py # Duplicate detection tests
โ”‚   โ”œโ”€โ”€ test_cli.py                # CLI tests
โ”‚   โ””โ”€โ”€ test_integration.py        # Integration tests
โ”œโ”€โ”€ .github/
โ”‚   โ””โ”€โ”€ workflows/
โ”‚       โ””โ”€โ”€ ci.yml                 # GitHub Actions CI/CD
โ”œโ”€โ”€ setup.py                       # Package configuration
โ”œโ”€โ”€ requirements.txt               # Dependencies
โ”œโ”€โ”€ requirements-dev.txt           # Dev dependencies
โ”œโ”€โ”€ mypy.ini                       # MyPy configuration
โ”œโ”€โ”€ .gitignore
โ”œโ”€โ”€ LICENSE
โ”œโ”€โ”€ CONTRIBUTING.md
โ””โ”€โ”€ README.md

๐Ÿค Contributing

Contributions are welcome! See CONTRIBUTING.md for details.

Quick Steps

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Make your changes
  4. Add tests
  5. Run tests (pytest)
  6. Commit (git commit -m 'feat: add amazing feature')
  7. Push (git push origin feature/amazing-feature)
  8. Create a Pull Request

๐Ÿ“ License

This project is licensed under the MIT License - see LICENSE for details.

๐Ÿ™ Acknowledgments

Created with:

  • Mutagen - Python Audio Metadata Library
  • pytest - Testing Framework

๐Ÿ“ž Support

๐Ÿ—บ๏ธ Roadmap

  • GUI Interface (tkinter/PyQt)
  • Direct Spotify/Apple Music integration
  • Docker Container
  • Web Interface
  • Intelligent genre detection
  • Playlist analysis and statistics

๐Ÿ’ก Examples

Process Large Music Library

# Scan 10,000+ songs and split into multiple CSV files
musiclist-for-soundiiz -i /large/library -o playlist.csv --max-songs-per-file 500
# Creates: playlist_1.csv, playlist_2.csv, playlist_3.csv, ...

Lossless Formats Only

# Only FLAC and WAV
musiclist-for-soundiiz -i /music -e .flac .wav -o lossless.csv

Complete Export (All Formats)

# CSV for Soundiiz
musiclist-for-soundiiz -i /music -o soundiiz.csv -f csv

# JSON for backup/analysis
musiclist-for-soundiiz -i /music -o backup.json -f json

# M3U for media player
musiclist-for-soundiiz -i /music -o playlist.m3u -f m3u

Find Duplicates in Large Library

# Find duplicates and create detailed report
musiclist-for-soundiiz -i /large/library \
  --detect-duplicates \
  --duplicate-report dups.txt \
  -o clean.csv

# Automatically remove duplicates and export clean list
musiclist-for-soundiiz -i /large/library \
  --remove-duplicates \
  --duplicate-strategy keep_shortest_path \
  -o clean_playlist.csv

Combine Multiple Music Sources

# Combine music from multiple hard drives/folders
musiclist-for-soundiiz \
  -i /mnt/hdd1/music /mnt/hdd2/music /home/user/Downloads/music \
  --remove-duplicates \
  -o combined.csv

Developed with โค๏ธ for the music community

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

musiclist_for_soundiiz-1.0.8.tar.gz (91.9 kB view details)

Uploaded Source

Built Distribution

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

musiclist_for_soundiiz-1.0.8-py3-none-any.whl (29.6 kB view details)

Uploaded Python 3

File details

Details for the file musiclist_for_soundiiz-1.0.8.tar.gz.

File metadata

  • Download URL: musiclist_for_soundiiz-1.0.8.tar.gz
  • Upload date:
  • Size: 91.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for musiclist_for_soundiiz-1.0.8.tar.gz
Algorithm Hash digest
SHA256 c554aae3828be93aa65ff670b8a760d0975304fc5e18b77883dcda55597dfadd
MD5 5ef069e3a1c98d6b8b75f54bdff6beb0
BLAKE2b-256 c76bc748b04b368b2b444bd8e2bdb7f3c83c0ff76ade168f8d32a064466298ae

See more details on using hashes here.

File details

Details for the file musiclist_for_soundiiz-1.0.8-py3-none-any.whl.

File metadata

File hashes

Hashes for musiclist_for_soundiiz-1.0.8-py3-none-any.whl
Algorithm Hash digest
SHA256 527ede5bbae70a63515ec47edcacd4404bf6c03f1426f6d8653bee71fc7df48b
MD5 92d1c19af2b27d8facc767b042d61e00
BLAKE2b-256 54d9ec8cd73fe200ca0cc4195ec939fadc034055e4c29afa9a5655d2978255a4

See more details on using hashes here.

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