Skip to main content

CLI application to manage a music collection of mp3 tracks

Project description


The main motivation is to solve the scenario where some music fan, DJ, bartender, or melomaniac may face: ‘Considering these tons of mp3 files around, what music do I play?’. For instance, ‘what genre would I want to listen?’ and ‘which random songs can fill up the available time that I have?’ are the type of questions that rolabesti answers.


rolabesti is a CLI application to manage a music library, performing the following actions on mp3 files: loading to database, parsing, searching, playing, enqueueing, copying, and tagging.


  • Linux platform.

  • Python 3.7+. A virtual environment is highly recommended.

  • MongoDB instance.

  • vlc player.


$ pip install rolabesti


The default settings can be overriden in ~/.config/rolabesti/rolabesti.conf. This configuration file has INI syntax with a unique section named [rolabesti].

  • MUSIC_DIR: path where the mp3 files are located, default is ~/Music.

  • MAX_TRACK_LENGTH: maximum track length in minutes, corresponding to the MAX argument, default is 10.

  • MIN_TRACK_LENGTH: minimum track length in minutes, corresponding to the MIN argument, default is 0.

  • MAX_TRACKLIST_LENGTH: maximum tracklist length in minutes, corresponding to the MAX_TRACKLIST_LENGTH argument - 0 denotes no tracklist length limit, default is 60.

  • SORTING: tracklist sorting by trackpath, corresponding to the SORTING argument - choices are asc (ascending), desc (descending) and random, default is random.

  • PLAYER: player to play and enqueue tracks, corresponding to the PLAYER argument - choices are shell (play tracks directly in the shell) and vlc (play tracks in the vlc player, opening it if necessary), default is vlc.

  • OVERLAP_LENGTH: when selecting shell player, overlap length in seconds of two consecutive tracks, corresponding to the OVERLAP_LENGTH argument - minimum is 0, maximum is 30, default is 3. The overlap length determines the period where the last seconds of the previous track and the first seconds of the next track are playing simultaneously.

  • MONGO_HOST: MongoDB host, default is localhost.

  • MONGO_PORT: MongoDB port, default is 27017.

  • MONGO_DBNAME: MongoDB database name, default is rolabesti.

  • MONGO_COLNAME: MongoDB collection name, default is tracks.

Before running the application, locating the mp3 files in MUSIC_DIR is enough. Besides, the searching results become more accurate when the track path has one of following patterns.

  • MUSIC_DIR/Places/<place>/Genres/<genre>/Albums/<album>/[<side>/]<title>.mp3

  • MUSIC_DIR/Places/<place>/Genres/<genre>/<artist>/<album>/[<side>/]<title>.mp3

  • MUSIC_DIR/Places/<place>/Genres/<genre>/<artist>/<title>.mp3

  • MUSIC_DIR/Places/<place>/Genres/<genre>/`<title>.mp3

  • MUSIC_DIR/Places/<place>/Albums/<album>/[<side>/]<title>.mp3

  • MUSIC_DIR/Places/<place>/<artist>/<album>/[<side>/]<title>.mp3

  • MUSIC_DIR/Places/<place>/<artist>/<title>.mp3

  • MUSIC_DIR/Places/<place>/<title>.mp3

  • MUSIC_DIR/Genres/<genre>/Albums/<album>/[<side>/]<title>.mp3

  • MUSIC_DIR/Genres/<genre>/<artist>/<album>/[<side>/]<title>.mp3

  • MUSIC_DIR/Genres/<genre>/<artist>/<title>.mp3

  • MUSIC_DIR/Genres/<genre>/<title>.mp3

  • MUSIC_DIR/Artists/<artist>/<album>/[<side>/]<title>.mp3

  • MUSIC_DIR/Artists/<artist>/<title>.mp3

  • MUSIC_DIR/Albums/<album>/[<side>/]<title>.mp3

  • MUSIC_DIR/[some/path/]<title>.mp3

<place>, <genre>, <artist>, <album>, <side> and <title> are placeholders of any length and character. The square brackets denote optional.

The database is loaded with tracks metadata running the load subcommand.

$ rolabesti load

When selecting vlc player, unique running instance configuration is recommended.

  • Tools/Preferences/Interface/Playlist and Instances
    • Allow only one instance: checked

    • Enqueue items into playlist in one instance mode: checked


$ rolabesti [-h] SUBCOMMAND [ARGUMENTS]

You can check the arguments for each subcommand with:

$ rolabesti SUBCOMMAND -h

Let’s see a couple of examples.

To play two hours of rock music, limiting the track length to 10 minutes, with random sorting:

$ rolabesti play -g rock -l 120 --max 10 -s random

To play an hour of rap music from Iceland, skipping intro and outro tracks (less than 2 minutes length), with ascending sorting:

$ rolabesti play -g rap -l 60 -p Iceland --min 2 -s asc

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

rolabesti-0.5.2.tar.gz (13.5 kB view hashes)

Uploaded source

Built Distribution

rolabesti-0.5.2-py3-none-any.whl (23.3 kB view hashes)

Uploaded py3

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Huawei Huawei PSF Sponsor Microsoft Microsoft PSF Sponsor NVIDIA NVIDIA PSF Sponsor Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page