# Supysonic Supysonic is a Python implementation of the [Subsonic][] server API. ![Build Status](https://github.com/spl0k/supysonic/workflows/Tests/badge.svg) [![codecov](https://codecov.io/gh/spl0k/supysonic/branch/master/graph/badge.svg)](https://codecov.io/gh/spl0k/supysonic) ![Python](https://img.shields.io/badge/python-3.5--3.9-blue.svg) Current supported features are: * browsing (by folders or tags) * streaming of various audio file formats * transcoding * user or random playlists * cover art * starred tracks/albums and ratings * [Last.FM][lastfm] scrobbling * Jukebox mode Supysonic currently targets the version 1.10.2 of the Subsonic API. For more details, go check the [API implementation status][docs-api]. [subsonic]: http://www.subsonic.org/ [lastfm]: https://www.last.fm/ [docs-api]: https://supysonic.readthedocs.io/en/latest/api.html ## Documentation Full documentation is available at https://supysonic.readthedocs.io/ ## Quickstart Use the following commands to install Supysonic, create an admin user, define a library folder, scan it and start serving using [Gunicorn][]. $ pip install git+https://github.com/spl0k/supysonic.git $ pip install gunicorn $ supysonic-cli user add MyUserName $ supysonic-cli user setroles --admin MyUserName $ supysonic-cli folder add MyLibrary /home/username/Music $ supysonic-cli folder scan MyLibrary $ gunicorn -b 0.0.0.0:5000 "supysonic.web:create_application()" You should now be able to enjoy your music with the client of your choice! But using only the above commands will use a default configuration and especially storing the database in a temporary directory. Head over to the documentaiton for [full setup instructions][docs-setup], plus other options if you don't want to use Gunicorn. Note that there's also an optional [daemon][docs-daemon] that watches for library changes and provides support for other features such as the jukebox mode. [gunicorn]: https://gunicorn.org/ [docs-setup]: https://supysonic.readthedocs.io/en/latest/setup/index.html [docs-daemon]: https://supysonic.readthedocs.io/en/latest/setup/daemon.html ## About client authentication The Subsonic API provides several authentication methods. One of them, known as _token authentication_ was added with API version 1.13.0. As Supysonic currently targets API version 1.9.0, the token based method isn't supported. So if your client offers you the option, you'll have to disable the token based authentication for it to work. ## Development stuff For those wishing to collaborate on the project, since Supysonic uses [Flask][] you can use its development server which provides automatic reloading and in-browser debugging among other things. To start said server: $ export FLASK_APP="supysonic.web:create_application()" $ export FLASK_ENV=development $ flask run And there's also the tests: $ python setup.py test $ python setup.py test --test-suite tests.with_net [flask]: https://flask.palletsprojects.com/