Skip to content

FOR THE COLLECTION YOU CALL YOUR OWN

Your music.
Your rules.
Your playlists.

You collected the music. Let the tags do the curating.

Genplis turns your local music collection into M3U playlists with a few readable rules. Add new music, run it again, and your playlists follow along. No manual track lists to maintain.

Get started Get the code

Local files. Open source. Python 3.12+.

A MIXTAPE, WITHOUT THE MANUAL WORK
1 / DEFINE · Metal.m3ug
genre ~ "Metal"
@SORT random
@MAX-DURATION 1h
2 / GENERATE
genplis ~/Music
3 / PLAY
Metal.m3u is ready for your next listening session.

LESS PLAYLIST MAINTENANCE. MORE LISTENING.

A little text. A lot of possibility.

Start with your tags

Genres, artists, years, ratings, and audio properties. Use the information already in your collection to find exactly the songs you want.

Explore tags →

Make the mix yours

Sort or shuffle. Remove duplicates. Pick a few tracks per artist, or cap a playlist at an hour. Small rules, useful combinations.

Meet M3UG →

Run it. Run it again.

A SQLite cache remembers parsed tags. Later runs only re-read changed files, with parallel parsing to help with larger cold scans.

See how it works →

FROM COLLECTION TO PLAYLIST

Your first mix is a few lines away.

Install from PyPI with uv, put a .m3ug filter in your music collection, and run Genplis. It writes an .m3u next to the filter when songs match. Your audio files stay untouched.

Walk through your first playlist →

uv tool install genplis
genplis ~/Music

Requires Python 3.12 or later.

A FEW IDEAS TO GET YOU LISTENING

What does your collection have in store?

Back to the eighties

year >= 1980
year < 1990

Two rules. One decade.

A little variety

@SORT random
@LIMIT 2 PER artist
@LIMIT 30

Keep any one artist from taking over.

The long way home

genre ~ "Synthwave"
@SORT random
@MAX-DURATION 90m

A soundtrack for the journey.

Browse all M3UG Examples →

Built for people who keep their music.

Genplis grew out of a music collection curated over 30 years—and the wish to spend less time maintaining playlists for it.

View on GitHub Help make it better