Skip to main content

Make M3U format playlist from command line.

Project description

mkpl make_playlist: Playlist maker

mkpl is a command line tool to create playlist files (M3U format), automatically.

Table of Contents

Installation

To install mkpl, choose one of the following methods:

Option 1: PyPI Installation (Recommended)

$ pip install make_playlist

Option 2: From Source

$ git clone https://github.com/MatteoGuadrini/mkpl.git
$ cd mkpl
$ pip install .

Command Arguments

mkpl supports numerous command-line arguments for flexible playlist creation. Below is a comprehensive reference:

Basic Options

Short Long Description Arguments
-d --directories Directories containing multimedia files Path of directories
-e --exclude-dirs Exclude specific directory paths Path of directories
-r --recursive Recursively search directories

File Format Options

Short Long Description Arguments
-f --format Select only a specific file format Format (e.g., mp3, mkv)
-i --include Include additional file formats Format list (e.g., mp3 mp4)
-p --pattern Include files matching regex pattern Regular expression
-P --exclude-pattern Exclude files matching regex pattern Regular expression

File Size, BPM & Duration Filters

Short Long Description Arguments
-z --size Minimum file size Bytes, kb, mb, gb (e.g., 2mb)
-A --max-size Maximum file size Bytes, kb, mb, gb (e.g., 4mb)
-M --length Minimum track length Seconds
-X --max-length Maximum track length Seconds
-b --bpm Minimum beats per minute BPM
-B --max-bpm Maximum beats per minute BPM

Playlist Configuration

Short Long Description Arguments
-t --title Set playlist title Title string
-g --encoding Set text encoding UTF-8, ASCII, UNICODE
-I --image Set playlist cover image Image file path
-m --max-tracks Limit number of tracks Number

File Management

Short Long Description Arguments
-F --file Add additional files File paths
-Q --audio Include only audio files
-W --video Include only video files
-l --link Add remote file links HTTP/HTTPS URLs
-j --join Join other playlist files Playlist file paths
-k --other-playlists Include other playlists Playlist file paths

Sorting & Ordering

Short Long Description
-o --orderby-name Sort by filename
-O --orderby-date Sort by creation date
-T --orderby-track Sort by track number
-y --orderby-year Sort by year metadata
-Z --orderby-size Sort by file size
-L --orderby-length Sort by track duration
-G --orderby-bpm Sort by BPM (beat per minute)
-H --orderby-publisher Sort by publisher
-s --shuffle Randomize track order
-D --descending Reverse sort order

Output & Processing

Short Long Description
-a --absolute Use absolute file paths
-u --unique Remove duplicate files
-c --append Append to existing playlist
-w --windows Use Windows path separators
-x --unix Use Unix path separators
-U --url-chars Apply URL encoding to paths
-N --add-info Include file metadata (#EXTINF)

Interactive & Utility Options

Short Long Description
-R --interactive Confirm each file before adding
-C --count Count files when creating playlist
-S --split Split into separate playlists by directory
-Y --filter Filter by metadata (artist, album, etc.)
-n --cache Cache results (seconds)
-v --verbose Enable debug output
-E --explain-error Show detailed error traceback
-V --version Display version information

Examples

Basic Usage

  1. Create a playlist for one music album:

    cd myalbum
    mkpl myalbum.m3u
    # or use default naming
    mkpl
    

Directory & Format Filtering

  1. Create playlist from specific format:

    mkpl -d HarryPotter -f mkv HP_saga.m3u
    
  2. Create shuffled playlist with size filters:

    mkpl -d "my_mp3_collection" "my_mp4_collection" -rs -z 2mb -A 4mb "my music.m3u"
    
  3. Exclude specific directories:

    mkpl -d "my_mp3_collection" "my_mp4_collection" -r -s -e "my_mp3_collection/metallica" "my_mp3_collection/dk" -- "my music.m3u"
    

Advanced Filtering

  1. Limit by track count:

    mkpl -d "my_series/GOT" -m 15 "got_first_15.m3u"
    
  2. Filter by track number with regex:

    mkpl -d "my_mp3_collection" -r -p "^[12]|[012]{2}" "my music.m3u"
    
  3. Filter by duration range:

    mkpl -d "music_collection" -M 42 -X 300 "My new collection"
    
  4. Filter by BPM range:

    mkpl -d "music_collection" -r -b 120 -B 140 "upbeat_tracks.m3u"
    

File Management

  1. Add external files to playlist:

    cd myalbum_special
    mkpl myalbum_special.m3u -F music_video.mp4 other_stuff/song1.mp3 other_stuff/song2.mp3
    
  2. Add remote file links:

    mkpl -d "new_collection" -r "my music.m3u" -l http://192.168.1.123/mp3/song1.mp3 http://192.168.1.123/mp3/song2.mp4
    
  3. Merge playlists:

    mkpl -d "Rock'n'Roll" -- "RockNRoll.m3u"
    mkpl -d "Hard Rock" -j "RockNRoll.m3u" -- "Rock.m3u"
    

Metadata & Formatting

  1. Add playlist metadata:

    mkpl -d "new_collection" -r "my music.m3u" -t "My Collection" -g "UTF-8" -I "new_collection/cover.jpg"
    
  2. Include track information (#EXTINF):

    mkpl -d "HeavyMetal/Master of Puppets" -N "master"
    cat "master.m3u"
    #EXTM3U
    #EXTINF:516,Metallica - Master of Puppets
    HeavyMetal/Master Of Puppets/02 - Master Of Puppets.mp3
    

Sorting & Organization

  1. Sort by various criteria:

    mkpl -d "new_collection" -r "my music.m3u" -o        # by name
    mkpl -d "new_collection" -r "my music.m3u" -O        # by date
    mkpl -d "new_collection" -r "my music.m3u" -T        # by track
    mkpl -d "new_collection" -r "my music.m3u" -y        # by year
    mkpl -d "new_collection" -r "my music.m3u" -Z        # by size
    mkpl -d "new_collection" -r "my music.m3u" -G        # by bpm
    mkpl -d "new_collection" -r "my music.m3u" -H        # by publisher
    mkpl -d "new_collection" -r "my music.m3u" -L -D     # by length (descending)
    
  2. Split into multiple playlists:

    mkpl -d "folder1" "folder2" "folder3" -r "my_music.m3u" -S
    # Results in: my_music.m3u, folder1.m3u, folder2.m3u, folder3.m3u
    

Metadata Filtering

  1. Filter by artist and album:

    mkpl -d "HeavyMetal" -Y artist=Metallica -Y album="Master of Puppets" -- "MoP.m3u"
    

Interactive & Utility Operations

  1. Count files:

    mkpl -d "new_collection" -r -C
    # Output: 4023
    
  2. Interactive confirmation for each file:

    mkpl -d "new_collection" -r -R
    Add file new_collection/sample1.mp3 to playlist? [Y/n]: y
    
  3. Append to existing playlist without duplicates:

    mkpl -d "new_collection" -rsu "my music.m3u" -a
    
  4. Speed process with cache:

    mkpl -d "new_collection" -r -n 300 "my music.m3u" -a # for 5 minutes read the cache if playlist is same
    

List of filter tags

Name Supported
album mp3, mp4, flac, wma
artist mp3, mp4, flac, wma
genre mp3, mp4, flac, wma
title mp3, mp4, flac, wma
year mp3, mp4, flac, wma
track mp3, mp4, flac, wma
bpm mp3, mp4, flac, wma
publisher mp3, mp4, flac, wma

Use it like Python module

You can use mkpl programmatically in your Python projects to build and write playlists dynamically.

Quick Start

Import the main functions:

from make_playlist import make_playlist, write_playlist

Basic example — create and write a playlist:

# Find multimedia files whose names start with a-f
playlist = make_playlist(
    '/Music/collections',
    ('mp3', 'mp4', 'aac'),
    pattern='^[a-f].*',
    recursive=True,
    unique=True
)

write_playlist('/Music/AtoF.m3u', 'wt', playlist)

Important Notes

  • make_playlist() returns a Playlist object containing PlaylistEntry items
  • You can iterate, filter, or convert results to a list before writing
  • Most CLI flags are exposed as keyword arguments (e.g., recursive, unique, add_info, encoding, title, image)
  • Use encoding='utf-8' parameter for UTF-8 encoded output
  • pathlib.Path objects are fully supported

Python Examples

Example 1: Write UTF-8 playlist with metadata

from pathlib import Path

plist = make_playlist(
    Path('/Music/collections'),
    ('mp3',),
    recursive=True
)

write_playlist(
    Path('/Music/AtoF.m3u'),
    'wt',
    plist,
    encoding='utf-8',
    title='A–F Collection',
    image=Path('/Music/cover.jpg')
)

Example 2: Inspect and filter results

results = make_playlist(
    '/Music/collections',
    ('mp3', 'flac'),
    recursive=True
)

for entry in results:
    print(f"File: {entry.file}")
    if entry.extinf:
        print(f"Info: {entry.extinf}")

Example 3: Advanced filtering with metadata

playlist = make_playlist(
    '/Music/HeavyMetal',
    ('mp3',),
    recursive=True,
    filters=[
        ('artist', 'Metallica'),
        ('album', 'Master of Puppets')
    ],
    add_info=True
)

write_playlist('/Music/MoP.m3u', 'wt', playlist)

API Reference

See function docstrings for complete parameter documentation:

help(make_playlist)
help(write_playlist)

Open source

mkpl is an open source project. Any contribute, It's welcome.

A great thanks.

For donations, press this

For me

paypal

For Telethon

The Telethon Foundation is a non-profit organization recognized by the Ministry of University and Scientific and Technological Research. They were born in 1990 to respond to the appeal of patients suffering from rare diseases. Come today, we are organized to dare to listen to them and answers, every day of the year.

Adopt the future

Treeware

This package is Treeware. If you use it in production, then we ask that you buy the world a tree to thank us for our work. By contributing to the Treeware forest you’ll be creating employment for local families and restoring wildlife habitats.

Buy us a tree

Acknowledgments

Special thanks to:

  • Mark LutzLearning Python and Programming Python books
  • Kenneth Reitz & Tanya SchlusserThe Hitchhiker's Guide to Python
  • Dane HillardPractices of the Python Pro
  • My family — For continuous support and inspiration

Thanks, Python!

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

make_playlist-1.26.0.tar.gz (27.8 kB view details)

Uploaded Source

Built Distribution

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

make_playlist-1.26.0-py3-none-any.whl (28.0 kB view details)

Uploaded Python 3

File details

Details for the file make_playlist-1.26.0.tar.gz.

File metadata

  • Download URL: make_playlist-1.26.0.tar.gz
  • Upload date:
  • Size: 27.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.4

File hashes

Hashes for make_playlist-1.26.0.tar.gz
Algorithm Hash digest
SHA256 e2b59d32b011349b838c5e612f8499175796fc048205009c627e8fbe441dd32d
MD5 85a04335fc260b480f14d9ef136d6272
BLAKE2b-256 8103ff78801444402c15420846e8fcf7f7e11f4c0b269e8dbd3b45df9580d4fe

See more details on using hashes here.

File details

Details for the file make_playlist-1.26.0-py3-none-any.whl.

File metadata

  • Download URL: make_playlist-1.26.0-py3-none-any.whl
  • Upload date:
  • Size: 28.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.4

File hashes

Hashes for make_playlist-1.26.0-py3-none-any.whl
Algorithm Hash digest
SHA256 2b5871dcaa4b78d93456b79643b5655e67923604acbced0f3f4954851f769110
MD5 173dc84d2685bec71fda322253f0a7fc
BLAKE2b-256 14409d0c0d5dcbf9f9e3503aa37f4328b2f6ef1b85359b85abd346331c0b009d

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