Skip to main content

Music swiss army knife

Project description

Tools

Result

Codacy

Codacy badge

Coverage

Coverage badge

Description

CLI / API / Website to manipulate music and create smart playlists, and play it !

It uses poetry and pyenv tools to manage project life and docker to test it.

Under the hood, there is a postgraphile API frontend backed by a postgresql database, it allow us to have users and security integrated.

Dev Environment

sudo apt install -y vlc libtag1-dev postgresql-server-dev-all ffmpeg python3-pip docker.io libchromaprint-tools libbz2-dev libsqlite3-dev llvm libncurses5-dev libncursesw5-dev tk-dev liblzma-dev libssl-dev libreadline-dev
sudo usermod -aG docker $(whoami)

git clone https://github.com/AdrienPensart/musicbot.git
cd musicbot

https://pyenv.run | bash
pyenv install --verbose $(cat .python-version) -ks
pyenv global $(cat .python-version)

# you should put that at your shell startup
eval "$(pyenv init -)"

python <(curl -sSL https://raw.githubusercontent.com/sdispater/poetry/master/get-poetry.py) --preview
poetry install

Testing

poetry run pytest
poetry run coverage-badge -f -o doc/coverage.svg

How to use

poetry run docker-compose build --parallel
poetry run docker-compose up
musicbot user create --email your_email --password your_password --save
musicbot local scan /tests/fixtures/folder1 /tests/fixtures/folder2
musicbot local tracks

Linting

poetry run pylint musicbot tests

Documentation

poetry run rstcheck doc/help.rst
poetry run doc/gen.sh
poetry run rstcheck README.rst

Commands

Usage: musicbot [OPTIONS] COMMAND [ARGS]...

  Music swiss knife, new gen.

Options:
  -V, --version                                       Show the version and exit.
  -c, --config PATH                                   Config file path  [default: ~/musicbot.ini]
  -l, --log PATH                                      Log file path
  -i, --info                                          Same as "--verbosity info"
  -d, --debug                                         Be very verbose, same as "--verbosity debug" + hide progress bars  [default: False]
  -t, --timings                                       Set verbosity to info and show execution timings  [default: False]
  -v, --verbosity [debug|info|warning|error|critical]
                                                      Verbosity levels  [default: warning]
  -q, --quiet                                         Disable progress bars  [default: False]
  -h, --help                                          Show this message and exit.

Commands:
  folder   Manage folders
  help     Print help
  json     JSON tools for music libraries
  local    Local music management
  music    Music file
  spotify  Spotify tool
  user     User management
  version  Print version
  youtube  Youtube tool

musicbot folder

Usage: musicbot folder [OPTIONS] COMMAND [ARGS]...

  Manage folders

Options:
  -h, --help  Show this message and exit.

Commands:
  flac2mp3  Convert all files in folders to mp3
  help      Print help
  tracks    List tracks

musicbot folder flac2mp3

Usage: musicbot folder flac2mp3 [OPTIONS] [FOLDERS]...

  Convert all files in folders to mp3

Options:
  --concurrency INTEGER  Number of coroutines  [default: 8]
  --dry                  Take no real action  [default: False]
  -h, --help             Show this message and exit.

musicbot folder tracks

Usage: musicbot folder tracks [OPTIONS] [FOLDERS]...

  List tracks

Options:
  --output [table|json|m3u|csv]  Output format  [default: table]
  -h, --help                     Show this message and exit.

musicbot help

Usage: musicbot help [OPTIONS] [COMMAND]...

  Print help

Options:
  -h, --help  Show this message and exit.

musicbot json

Usage: musicbot json [OPTIONS] COMMAND [ARGS]...

  JSON tools for music libraries

Options:
  -h, --help  Show this message and exit.

Commands:
  diff  Diff tracks
  help  Print help

musicbot json diff

Usage: musicbot json diff [OPTIONS] SOURCE DESTINATION

  Diff tracks

Options:
  -h, --help  Show this message and exit.

musicbot local

Usage: musicbot local [OPTIONS] COMMAND [ARGS]...

  Local music management

Options:
  -e, --email TEXT     User email
  -p, --password TEXT  User password
  --graphql TEXT       GraphQL endpoint  [default: http://127.0.0.1:5000/graphql]
  -t, --token TEXT     User token
  -h, --help           Show this message and exit.

Commands:
  artists       List artists
  bests         Generate bests playlists with some rules
  clean         Clean all musics
  consistency   Check music files consistency
  execute       Raw query
  filter        Print a filter
  filters       List filters
  find          Just list music files
  folders       List folders
  help          Print help
  load-filters  Load default filters
  play          Music player
  playlist      Generate a new playlist
  scan          (re)Load musics
  stats         Generate some stats for music collection with filters
  sync          Copy selected musics with filters to destination folder
  watch         Watch files changes in folders

musicbot local artists

Usage: musicbot local artists [OPTIONS]

  List artists

Options:
  --output [table|json|m3u|csv]  Output format  [default: table]
  -h, --help                     Show this message and exit.

musicbot local bests

Usage: musicbot local bests [OPTIONS] PATH

  Generate bests playlists with some rules

Options:
  --dry                   Take no real action  [default: False]
  --name TEXT             Filter name
  --limit INTEGER         Fetch a maximum limit of music
  --youtubes TEXT         Select musics with a youtube link
  --no-youtubes TEXT      Select musics without youtube link
  --spotifys TEXT         Select musics with a spotifys link
  --no-spotifys TEXT      Select musics without spotifys link
  --formats TEXT          Select musics with file format
  --no-formats TEXT       Filter musics without format
  --keywords TEXT         Select musics with keywords
  --no-keywords TEXT      Filter musics without keywords
  --artists TEXT          Select musics with artists
  --no-artists TEXT       Filter musics without artists
  --albums TEXT           Select musics with albums
  --no-albums TEXT        Filter musics without albums
  --titles TEXT           Select musics with titles
  --no-titles TEXT        Filter musics without titless
  --genres TEXT           Select musics with genres
  --no-genres TEXT        Filter musics without genres
  --min-duration INTEGER  Minimum duration filter (hours:minutes:seconds)
  --max-duration INTEGER  Maximum duration filter (hours:minutes:seconds))
  --min-size INTEGER      Minimum file size filter (in bytes)
  --max-size INTEGER      Maximum file size filter (in bytes)
  --min-rating FLOAT      Minimum rating  [default: 0.0]
  --max-rating FLOAT      Maximum rating  [default: 5.0]
  --relative              Generate relatives paths
  --shuffle               Randomize selection
  --prefix TEXT           Append prefix before each path (implies relative)
  --suffix TEXT           Append this suffix to playlist name
  -h, --help              Show this message and exit.

musicbot local clean

Usage: musicbot local clean [OPTIONS]

  Clean all musics

Options:
  -h, --help  Show this message and exit.

musicbot local consistency

Usage: musicbot local consistency [OPTIONS] [FOLDERS]...

  Check music files consistency

Options:
  -h, --help  Show this message and exit.

musicbot local execute

Usage: musicbot local execute [OPTIONS] QUERY

  Raw query

Options:
  -h, --help  Show this message and exit.

musicbot local filter

Usage: musicbot local filter [OPTIONS] NAME

  Print a filter

Options:
  --output [table|json|m3u|csv]  Output format  [default: table]
  -h, --help                     Show this message and exit.

musicbot local filters

Usage: musicbot local filters [OPTIONS]

  List filters

Options:
  --output [table|json|m3u|csv]  Output format  [default: table]
  -h, --help                     Show this message and exit.

musicbot local find

Usage: musicbot local find [OPTIONS] [FOLDERS]...

  Just list music files

Options:
  -h, --help  Show this message and exit.

musicbot local folders

Usage: musicbot local folders [OPTIONS]

  List folders

Options:
  --output [table|json|m3u|csv]  Output format  [default: table]
  -h, --help                     Show this message and exit.

musicbot local load-filters

Usage: musicbot local load-filters [OPTIONS]

  Load default filters

Options:
  -h, --help  Show this message and exit.

musicbot local play

Usage: musicbot local play [OPTIONS]

  Music player

Options:
  -e, --email TEXT        User email
  -p, --password TEXT     User password
  --graphql TEXT          GraphQL endpoint  [default: http://127.0.0.1:5000/graphql]
  -t, --token TEXT        User token
  --name TEXT             Filter name
  --limit INTEGER         Fetch a maximum limit of music
  --youtubes TEXT         Select musics with a youtube link
  --no-youtubes TEXT      Select musics without youtube link
  --spotifys TEXT         Select musics with a spotifys link
  --no-spotifys TEXT      Select musics without spotifys link
  --formats TEXT          Select musics with file format
  --no-formats TEXT       Filter musics without format
  --keywords TEXT         Select musics with keywords
  --no-keywords TEXT      Filter musics without keywords
  --artists TEXT          Select musics with artists
  --no-artists TEXT       Filter musics without artists
  --albums TEXT           Select musics with albums
  --no-albums TEXT        Filter musics without albums
  --titles TEXT           Select musics with titles
  --no-titles TEXT        Filter musics without titless
  --genres TEXT           Select musics with genres
  --no-genres TEXT        Filter musics without genres
  --min-duration INTEGER  Minimum duration filter (hours:minutes:seconds)
  --max-duration INTEGER  Maximum duration filter (hours:minutes:seconds))
  --min-size INTEGER      Minimum file size filter (in bytes)
  --max-size INTEGER      Maximum file size filter (in bytes)
  --min-rating FLOAT      Minimum rating  [default: 0.0]
  --max-rating FLOAT      Maximum rating  [default: 5.0]
  --relative              Generate relatives paths
  --shuffle               Randomize selection
  -h, --help              Show this message and exit.

musicbot local playlist

Usage: musicbot local playlist [OPTIONS] [PATH]

  Generate a new playlist

Options:
  --dry                          Take no real action  [default: False]
  --name TEXT                    Filter name
  --limit INTEGER                Fetch a maximum limit of music
  --youtubes TEXT                Select musics with a youtube link
  --no-youtubes TEXT             Select musics without youtube link
  --spotifys TEXT                Select musics with a spotifys link
  --no-spotifys TEXT             Select musics without spotifys link
  --formats TEXT                 Select musics with file format
  --no-formats TEXT              Filter musics without format
  --keywords TEXT                Select musics with keywords
  --no-keywords TEXT             Filter musics without keywords
  --artists TEXT                 Select musics with artists
  --no-artists TEXT              Filter musics without artists
  --albums TEXT                  Select musics with albums
  --no-albums TEXT               Filter musics without albums
  --titles TEXT                  Select musics with titles
  --no-titles TEXT               Filter musics without titless
  --genres TEXT                  Select musics with genres
  --no-genres TEXT               Filter musics without genres
  --min-duration INTEGER         Minimum duration filter (hours:minutes:seconds)
  --max-duration INTEGER         Maximum duration filter (hours:minutes:seconds))
  --min-size INTEGER             Minimum file size filter (in bytes)
  --max-size INTEGER             Maximum file size filter (in bytes)
  --min-rating FLOAT             Minimum rating  [default: 0.0]
  --max-rating FLOAT             Maximum rating  [default: 5.0]
  --relative                     Generate relatives paths
  --shuffle                      Randomize selection
  --output [table|json|m3u|csv]  Output format  [default: table]
  -h, --help                     Show this message and exit.

musicbot local scan

Usage: musicbot local scan [OPTIONS] [FOLDERS]...

  (re)Load musics

Options:
  -h, --help  Show this message and exit.

musicbot local stats

Usage: musicbot local stats [OPTIONS]

  Generate some stats for music collection with filters

Options:
  --output [table|json|m3u|csv]  Output format  [default: table]
  --name TEXT                    Filter name
  --limit INTEGER                Fetch a maximum limit of music
  --youtubes TEXT                Select musics with a youtube link
  --no-youtubes TEXT             Select musics without youtube link
  --spotifys TEXT                Select musics with a spotifys link
  --no-spotifys TEXT             Select musics without spotifys link
  --formats TEXT                 Select musics with file format
  --no-formats TEXT              Filter musics without format
  --keywords TEXT                Select musics with keywords
  --no-keywords TEXT             Filter musics without keywords
  --artists TEXT                 Select musics with artists
  --no-artists TEXT              Filter musics without artists
  --albums TEXT                  Select musics with albums
  --no-albums TEXT               Filter musics without albums
  --titles TEXT                  Select musics with titles
  --no-titles TEXT               Filter musics without titless
  --genres TEXT                  Select musics with genres
  --no-genres TEXT               Filter musics without genres
  --min-duration INTEGER         Minimum duration filter (hours:minutes:seconds)
  --max-duration INTEGER         Maximum duration filter (hours:minutes:seconds))
  --min-size INTEGER             Minimum file size filter (in bytes)
  --max-size INTEGER             Maximum file size filter (in bytes)
  --min-rating FLOAT             Minimum rating  [default: 0.0]
  --max-rating FLOAT             Maximum rating  [default: 5.0]
  --relative                     Generate relatives paths
  --shuffle                      Randomize selection
  -h, --help                     Show this message and exit.

musicbot local sync

Usage: musicbot local sync [OPTIONS] DESTINATION

  Copy selected musics with filters to destination folder

Options:
  --dry                   Take no real action  [default: False]
  --name TEXT             Filter name
  --limit INTEGER         Fetch a maximum limit of music
  --youtubes TEXT         Select musics with a youtube link
  --no-youtubes TEXT      Select musics without youtube link
  --spotifys TEXT         Select musics with a spotifys link
  --no-spotifys TEXT      Select musics without spotifys link
  --formats TEXT          Select musics with file format
  --no-formats TEXT       Filter musics without format
  --keywords TEXT         Select musics with keywords
  --no-keywords TEXT      Filter musics without keywords
  --artists TEXT          Select musics with artists
  --no-artists TEXT       Filter musics without artists
  --albums TEXT           Select musics with albums
  --no-albums TEXT        Filter musics without albums
  --titles TEXT           Select musics with titles
  --no-titles TEXT        Filter musics without titless
  --genres TEXT           Select musics with genres
  --no-genres TEXT        Filter musics without genres
  --min-duration INTEGER  Minimum duration filter (hours:minutes:seconds)
  --max-duration INTEGER  Maximum duration filter (hours:minutes:seconds))
  --min-size INTEGER      Minimum file size filter (in bytes)
  --max-size INTEGER      Maximum file size filter (in bytes)
  --min-rating FLOAT      Minimum rating  [default: 0.0]
  --max-rating FLOAT      Maximum rating  [default: 5.0]
  --relative              Generate relatives paths
  --shuffle               Randomize selection
  -h, --help              Show this message and exit.

musicbot local watch

Usage: musicbot local watch [OPTIONS]

  Watch files changes in folders

Options:
  -h, --help  Show this message and exit.

musicbot music

Usage: musicbot music [OPTIONS] COMMAND [ARGS]...

  Music file

Options:
  -h, --help  Show this message and exit.

Commands:
  fingerprint  Print music fingerprint
  help         Print help

musicbot music fingerprint

Usage: musicbot music fingerprint [OPTIONS] PATH

  Print music fingerprint

Options:
  --acoustid-api-key TEXT  AcoustID API Key
  -h, --help               Show this message and exit.

musicbot spotify

Usage: musicbot spotify [OPTIONS] COMMAND [ARGS]...

  Spotify tool

Options:
  -h, --help  Show this message and exit.

Commands:
  help       Print help
  playlist   Show playlist
  playlists  List playlists
  tracks     Show tracks

musicbot spotify playlist

Usage: musicbot spotify playlist [OPTIONS] NAME

  Show playlist

Options:
  --spotify TEXT  Spotify token
  -h, --help      Show this message and exit.

musicbot spotify playlists

Usage: musicbot spotify playlists [OPTIONS]

  List playlists

Options:
  --spotify TEXT  Spotify token
  -h, --help      Show this message and exit.

musicbot spotify tracks

Usage: musicbot spotify tracks [OPTIONS]

  Show tracks

Options:
  --spotify TEXT                 Spotify token
  --output [table|json|m3u|csv]  Output format  [default: table]
  -h, --help                     Show this message and exit.

musicbot user

Usage: musicbot user [OPTIONS] COMMAND [ARGS]...

  User management

Options:
  -h, --help  Show this message and exit.

Commands:
  help                        Print help
  list                        List users (admin)
  login (token)               Authenticate user
  register (add,create,new)   Register a new user
  unregister (delete,remove)  Remove a user

musicbot user list

Usage: musicbot user list [OPTIONS]

  List users (admin)

Options:
  --output [table|json|m3u|csv]  Output format  [default: table]
  --graphql-admin TEXT           GraphQL endpoint  [default: http://127.0.0.1:5001/graphql]
  -h, --help                     Show this message and exit.

musicbot user login

Usage: musicbot user login [OPTIONS]

  Authenticate user

Options:
  -e, --email TEXT     User email
  -p, --password TEXT  User password
  --graphql TEXT       GraphQL endpoint  [default: http://127.0.0.1:5000/graphql]
  -s, --save           Save to config file  [default: False]
  -h, --help           Show this message and exit.

musicbot user register

Usage: musicbot user register [OPTIONS]

  Register a new user

Options:
  -e, --email TEXT     User email
  -p, --password TEXT  User password
  --first-name TEXT    User first name
  --last-name TEXT     User last name
  --graphql TEXT       GraphQL endpoint  [default: http://127.0.0.1:5000/graphql]
  -s, --save           Save to config file  [default: False]
  -h, --help           Show this message and exit.

musicbot user unregister

Usage: musicbot user unregister [OPTIONS]

  Remove a user

Options:
  -e, --email TEXT     User email
  -p, --password TEXT  User password
  --graphql TEXT       GraphQL endpoint  [default: http://127.0.0.1:5000/graphql]
  -t, --token TEXT     User token
  -h, --help           Show this message and exit.

musicbot version

Usage: musicbot version [OPTIONS]

  Print version

  Equivalent : -V

Options:
  -h, --help  Show this message and exit.

musicbot youtube

Usage: musicbot youtube [OPTIONS] COMMAND [ARGS]...

  Youtube tool

Options:
  -h, --help  Show this message and exit.

Commands:
  find         Search a youtube link with artist and title
  fingerprint  Fingerprint a youtube video
  help         Print help
  search       Search a youtube link with artist and title

musicbot youtube find

Usage: musicbot youtube find [OPTIONS] PATH

  Search a youtube link with artist and title

Options:
  --youtube-api-key TEXT   YouTube API Key
  --acoustid-api-key TEXT  AcoustID API Key
  -h, --help               Show this message and exit.

musicbot youtube fingerprint

Usage: musicbot youtube fingerprint [OPTIONS] URL

  Fingerprint a youtube video

Options:
  --acoustid-api-key TEXT  AcoustID API Key
  -h, --help               Show this message and exit.

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

musicbot-0.2.0.tar.gz (38.2 kB view hashes)

Uploaded Source

Built Distribution

musicbot-0.2.0-py3-none-any.whl (42.8 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page