Music swiss army knife
Project description
Tools |
Result |
---|---|
Codacy |
|
Coverage |
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.
musicbot youtube search
Usage: musicbot youtube search [OPTIONS] ARTIST TITLE
Search a youtube link with artist and title
Options:
--youtube-api-key TEXT YouTube API Key
-h, --help Show this message and exit.
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
musicbot-0.2.0.tar.gz
(38.2 kB
view hashes)
Built Distribution
musicbot-0.2.0-py3-none-any.whl
(42.8 kB
view hashes)