Make M3U format playlist from command line.
Project description
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 & 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 |
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 |
| -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 |
| -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 without 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
-
Create a playlist for one music album:
cd myalbum mkpl myalbum.m3u # or use default naming mkpl
Directory & Format Filtering
-
Create playlist from specific format:
mkpl -d HarryPotter -f mkv HP_saga.m3u
-
Create shuffled playlist with size filters:
mkpl -d "my_mp3_collection" "my_mp4_collection" -rs -z 2mb -A 4mb "my music.m3u"
-
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
-
Limit by track count:
mkpl -d "my_series/GOT" -m 15 "got_first_15.m3u"
-
Filter by track number with regex:
mkpl -d "my_mp3_collection" -r -p "^[12]|[012]{2}" "my music.m3u"
-
Filter by duration range:
mkpl -d "music_collection" -M 42 -X 300 "My new collection"
File Management
-
Add external files to playlist:
cd myalbum_special mkpl myalbum_special.m3u -F music_video.mp4 other_stuff/song1.mp3 other_stuff/song2.mp3
-
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
-
Merge playlists:
mkpl -d "Rock'n'Roll" -- "RockNRoll.m3u" mkpl -d "Hard Rock" -j "RockNRoll.m3u" -- "Rock.m3u"
Metadata & Formatting
-
Add playlist metadata:
mkpl -d "new_collection" -r "my music.m3u" -t "My Collection" -g "UTF-8" -I "new_collection/cover.jpg"
-
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
-
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" -L -D # by length (descending)
-
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
-
Filter by artist and album:
mkpl -d "HeavyMetal" -Y artist=Metallica -Y album="Master of Puppets" -- "MoP.m3u"
Interactive & Utility Operations
-
Count files:
mkpl -d "new_collection" -r -C # Output: 4023
-
Interactive confirmation for each file:
mkpl -d "new_collection" -r -R Add file new_collection/sample1.mp3 to playlist? [Y/n]: y
-
Append to existing playlist without duplicates:
mkpl -d "new_collection" -rsu "my music.m3u" -a
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 aPlaylistobject containingPlaylistEntryitems- 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.Pathobjects 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
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.
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.
Acknowledgments
Special thanks to:
- Mark Lutz — Learning Python and Programming Python books
- Kenneth Reitz & Tanya Schlusser — The Hitchhiker's Guide to Python
- Dane Hillard — Practices of the Python Pro
- My family — For continuous support and inspiration
Thanks, Python!
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 make_playlist-1.21.0.tar.gz.
File metadata
- Download URL: make_playlist-1.21.0.tar.gz
- Upload date:
- Size: 26.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
83e90c61539a487998393fb5b7624df03ec1b867ff616b2a70444ac6c2f5b16c
|
|
| MD5 |
56962072c99ee03075b22af8ef45aeb4
|
|
| BLAKE2b-256 |
98a65f9e4b4965396d38ebbb75dfdbefb616a98cec9ae28c3dcef0986b528d40
|
File details
Details for the file make_playlist-1.21.0-py3-none-any.whl.
File metadata
- Download URL: make_playlist-1.21.0-py3-none-any.whl
- Upload date:
- Size: 27.0 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 |
8da658f97ed068edab754d57b1feae6f2bd88f3cc66b9a81beb54cf57c9376ea
|
|
| MD5 |
ce86ea9232a75b79f11d8af782f82c5d
|
|
| BLAKE2b-256 |
d9ca13aa225f10e1e6ffdef062e4d84bf300b80cf42914c6face2043db0c898f
|