Extract music file metadata for Soundiiz import
Project description
MusicList for Soundiiz ๐ต
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
- Quick Start
- Usage Examples
- Configuration
- Export Formats
- Soundiiz Import
- Development
- Testing
- Contributing
- License
๐ 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
- Ubuntu/Debian:
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:
- Add Directories: Click "Add Directory" to select music folders
- Choose Output: Select file name and format (CSV, JSON, M3U, TXT)
- Options: Enable duplicate detection, recursive scanning
- Process: Click "Process Files" and watch the progress
- 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
-
Create CSV file:
musiclist-for-soundiiz -i /path/to/music -o my_music.csv
-
Go to Soundiiz:
- Open soundiiz.com
- Sign in
-
Start Import:
- Click "Import"
- Select "CSV File"
- Upload your
my_music.csv
-
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
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Make your changes
- Add tests
- Run tests (
pytest) - Commit (
git commit -m 'feat: add amazing feature') - Push (
git push origin feature/amazing-feature) - Create a Pull Request
๐ License
This project is licensed under the MIT License - see LICENSE for details.
๐ Acknowledgments
Created with:
๐ Support
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- Documentation: README
๐บ๏ธ 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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c554aae3828be93aa65ff670b8a760d0975304fc5e18b77883dcda55597dfadd
|
|
| MD5 |
5ef069e3a1c98d6b8b75f54bdff6beb0
|
|
| BLAKE2b-256 |
c76bc748b04b368b2b444bd8e2bdb7f3c83c0ff76ade168f8d32a064466298ae
|
File details
Details for the file musiclist_for_soundiiz-1.0.8-py3-none-any.whl.
File metadata
- Download URL: musiclist_for_soundiiz-1.0.8-py3-none-any.whl
- Upload date:
- Size: 29.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
527ede5bbae70a63515ec47edcacd4404bf6c03f1426f6d8653bee71fc7df48b
|
|
| MD5 |
92d1c19af2b27d8facc767b042d61e00
|
|
| BLAKE2b-256 |
54d9ec8cd73fe200ca0cc4195ec939fadc034055e4c29afa9a5655d2978255a4
|