{ "info": { "author": "Chris Newton", "author_email": "redshodan@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Framework :: Pyramid", "Intended Audience :: End Users/Desktop", "Natural Language :: English", "Operating System :: POSIX", "Programming Language :: Python", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Internet :: WWW/HTTP", "Topic :: Internet :: WWW/HTTP :: WSGI :: Application" ], "description": "Unsonic, the un-Subsonic music server.\n\nStatus\n======\n\n## PyPi\n\n[![Latest Version](https://img.shields.io/pypi/v/unsonic.svg)](https://pypi.python.org/pypi/unsonic/)\n[![Project Status](https://img.shields.io/pypi/status/unsonic.svg)](https://pypi.python.org/pypi/unsonic/)\n[![License](https://img.shields.io/pypi/l/unsonic.svg)](https://pypi.python.org/pypi/unsonic/)\n[![Supported Python Versions](https://img.shields.io/pypi/pyversions/unsonic.svg)](https://pypi.python.org/pypi/unsonic/)\n\n## Builds\n\n[![Build Status](https://travis-ci.org/redshodan/unsonic.svg?branch=master)](https://travis-ci.org/redshodan/unsonic)\n[![Coverage Status](https://coveralls.io/repos/github/redshodan/unsonic/badge.svg?branch=master)](https://coveralls.io/github/redshodan/unsonic?branch=master)\n[![Updates](https://pyup.io/repos/github/redshodan/unsonic/shield.svg)](https://pyup.io/repos/github/redshodan/unsonic/)\n\n\nAbout\n=====\nUnsonic is a free drop in replacement for the Subsonic music server. It follows\nthe Subsonic API and is usable with existing Subsonic clients without requiring\nany adjustment to them.\n\nUnsonic strives to be better at handling music files tags, playing of those\nsongs and use less system resources.\n\n\nSupported Clients\n=================\nThese are the clients that are known to work well:\n * DSub (Android)\n * JamStash (web)\n\nThese clients sort of work with isues:\n * Clementine (Linux desktop)\n\n\nInstallation\n============\nUnsonic requires Python 3.6 or greater to work.\n\n## Install Unsonic as a system service via pip\n * pip3 install unsonic\n * sudo unsonic install\n * \n * su unsonic -c 'unsonic sync'\n * su unsonic -c 'unsonic adduser '\n * systemctl start unsonic\n\n\n## Running Unsonic from source\n * make build\n * make run\n\n\nInstalling a Web Client\n-----------------------\n * Download/clone Jamstash from https://github.com/tsquillario/Jamstash\n * Edit your config.ini so that the unsonic.ui path points to jamstash/dist\n \n ```\n [unsonic]\n ui = ../Jamstash/dist\n ```\n \n * With Unsonic running, point your browser at the url printed out, normally\n something like http://localhost:6543 and your will be redirected to the load\n Jamstash.\n * Jamstash is very picky about the server URL in it's configuration. Make sure\n there is no trailing '/' character otherwise Jamstash will not be able to\n build the path correctly.\n\n\nDocker Installation\n-------------------\nDocker files are located in the ./docker directory. The Makefile contains some \nconvenience targets but the specific ``docker`` and/or ``docker-compose`` cmmands\nare also shown.\n\nTo build the Unsonic Docker image:\n\n```\n$ docker build ./docker\n```\n\nOr using docker-compose:\n\n```\n$ docker-compose -f ./docker/docker-compose.yml build\n```\n\nThe docker-compose file defines 3 containers, each is geared toward a development/test setup; a\nproduction Docker should only use these as a reference. The containers defined are of PostgreSQL,\nand an Unsonic serve based on PostgreSQL and SQLite. The Unsonic containers requires a music\ndirectory to volume mount so one must be specified.\n\n```\n$ MUSIC_DIR=~/music/ docker-compose -f ./docker/docker-compose.yml create\n$ MUSIC_DIR=~/music/ docker-compose -f ./docker/docker-compose.yml up Unsonic-postgres\n```\n\n\nOr using the Makefile to simplify all of the above.\n\n```\n$ make MUSIC_DIR=~/music/ docker-sqlite\n```\n\nSee docker/Dockerfile for details about the ``unsonic`` image. The container details are \ndefined ``docker/docker-compose.yml``. The files ``docker/config.ini`` and ``docker/unsonic-init``\ncan be used to tweak the Unsonic process itself.\n\n\nAdjusting the configuration\n---------------------------\nThe main configuration settings are the location of the database\n\n```\n[mishmash]\nsqlalchemy.url = sqlite:///%(here)s/build/development.sqlite\n```\n\nand the location of the music libraries\n\n```\n[library:Music]\npaths = ~/music\nsync = true\n\n[library:More Music]\npaths = /data/music\nsync = true\n\n```\n\nAdjust them to fit your deployment needs. The mishmash.paths can have multiple \nmusic directories, one per line. %(here)s refers to the location of the \nconfiguration file itself.\n\n\nRunning with TLS\n----------------\nUnsonic itself doesn't handle TLS, but can easily be run behind a reverse proxy\nthat does. The following example shows how to configure nginx to reverse proxy\nto a local Unsonic instance. Replace example.com with your domain name/IP. You\nmay change the path portion of the url from \"unsonic\" to whatever you wish, or\nremove it completely.\n\nThis would go into your /etc/nginx/nginx.conf or its own file in\n/etc/nginx/sites-available depending on how your distro is setup.\n\n```\nserver {\n listen 80;\n server_name example.com;\n return 301 https://$host$request_uri;\n}\n\nserver {\n listen 443 ssl http2;\n server_name example.com;\n\n ssl config...\n\n # Your Unsonic is located on https://example.com/\n location / {\n proxy_set_header Host $host;\n proxy_set_header X-Real-IP $remote_addr;\n proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n proxy_set_header X-Forwarded-Proto $scheme;\n proxy_buffers 16 4k;\n proxy_buffer_size 2k;\n proxy_pass http://localhost:6543;\n proxy_read_timeout 90;\n }\n```\n\nDeveloping Unsonic\n==================\n\n### Development build\n * make devel\n * make devel-run\n\n\n### Tests\n * make tests\n\n\nRunning\n-------\n * ./bin/unsonic -c sync\n * ./bin/unsonic -c adduser name pass\n * ./bin/unsonic -c serve [--reload]\n\n\nManual Testing\n--------------\n * ./test/bin/tester getArtists\n\n\nLicense\n-------\nUnsonic is licensed under the GPL v2 license. See the COPYING file for details or\nhttp://www.gnu.org/licenses/gpl-2.0.html#SEC1\n\n\n****************************** CHANGES ******************************\n\n0.1\n---\n\n* Initial version", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/redshodan/unsonic", "keywords": "unsonic,mishmash,eyed3,web,wsgi,bfg,pylons,pyramid", "license": "GPLv2", "maintainer": "", "maintainer_email": "", "name": "unsonic", "package_url": "https://pypi.org/project/unsonic/", "platform": "Any", "project_url": "https://pypi.org/project/unsonic/", "project_urls": { "Homepage": "https://github.com/redshodan/unsonic" }, "release_url": "https://pypi.org/project/unsonic/0.1.3/", "requires_dist": null, "requires_python": ">=3.6", "summary": "Unsonic, the un-Subsonic music server.", "version": "0.1.3" }, "last_serial": 3536836, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "3fbf1d1dd7dd70ac8b8b7d3d5c0dd8fa", "sha256": "5fce9783c23154247a9240f4d2fd7caf404fd7f2dc870cfc054b0f235586c28c" }, "downloads": -1, "filename": "unsonic-0.1.tar.gz", "has_sig": false, "md5_digest": "3fbf1d1dd7dd70ac8b8b7d3d5c0dd8fa", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 215054, "upload_time": "2018-01-20T18:26:52", "url": "https://files.pythonhosted.org/packages/d6/32/37d5d540799d327ac41f38d1dcc0348f54a99bda70f80ef43e85ebff0f96/unsonic-0.1.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "263a7bddd87c04e0264d634cafc50bf9", "sha256": "9763dd499575a9e6388b237c19e32df383f1105235ddd8f38a3244d555ec11a5" }, "downloads": -1, "filename": "unsonic-0.1.1.tar.gz", "has_sig": false, "md5_digest": "263a7bddd87c04e0264d634cafc50bf9", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 215535, "upload_time": "2018-01-20T22:00:50", "url": "https://files.pythonhosted.org/packages/35/08/2140966d696a6da3b2c9e394d44bd23b7868fa072dfa83bb5dd484dfb96d/unsonic-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "5dab32a192323494258548e4e75ab8c7", "sha256": "3131f9ead1a1fd511496041e3fe6d38de81018b59aae87a7170be04bae465651" }, "downloads": -1, "filename": "unsonic-0.1.2.tar.gz", "has_sig": false, "md5_digest": "5dab32a192323494258548e4e75ab8c7", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 215437, "upload_time": "2018-01-25T21:36:09", "url": "https://files.pythonhosted.org/packages/96/ee/df785a432ed95c18b0228562670e720dd0ebb7f4467838a71c6a16825cf9/unsonic-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "2c6f42128d3441cf1a27224ff4cf5f7a", "sha256": "41ae768218b9af66887b2c30b0f43e40b232dc9ace4ab6f12dda28547b27ed33" }, "downloads": -1, "filename": "unsonic-0.1.3.tar.gz", "has_sig": false, "md5_digest": "2c6f42128d3441cf1a27224ff4cf5f7a", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 215784, "upload_time": "2018-01-31T00:54:07", "url": "https://files.pythonhosted.org/packages/c3/b7/4ce1157c9dedae4576ec435febb0b6e1e841965421c2294e58d7f79aba8a/unsonic-0.1.3.tar.gz" } ], "0.1b10": [ { "comment_text": "", "digests": { "md5": "bfb48bb8bee055a7bf85cffd582d3bcf", "sha256": "c27c6a58628d8e8c86175550823cf9deaf7dd189169980055b2f70116fec2938" }, "downloads": -1, "filename": "unsonic-0.1b10.tar.gz", "has_sig": false, "md5_digest": "bfb48bb8bee055a7bf85cffd582d3bcf", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 50300, "upload_time": "2017-10-05T02:20:08", "url": "https://files.pythonhosted.org/packages/a6/13/25c3e539c9a89e74b4e870b1052bd57677c79b5336980be4ff639664de1d/unsonic-0.1b10.tar.gz" } ], "0.1b11": [ { "comment_text": "", "digests": { "md5": "300476f680a0f4b734875f5469a4ada8", "sha256": "7f40663f120f58a831872441d475684a2b46e6502d434455351e281efd251fcf" }, "downloads": -1, "filename": "unsonic-0.1b11.tar.gz", "has_sig": false, "md5_digest": "300476f680a0f4b734875f5469a4ada8", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 50505, "upload_time": "2017-10-05T04:48:58", "url": "https://files.pythonhosted.org/packages/1e/3b/2f67e00e24a7e5e223f0a87efe600bf7084c1b785fa29993daba68ab92a9/unsonic-0.1b11.tar.gz" } ], "0.1b12": [ { "comment_text": "", "digests": { "md5": "2019f4765787bb104a2c37249dbfdea1", "sha256": "43d6d7e0aa910dd1008fb8d3798af18c8873f03c7a0614be96e18acc09aad700" }, "downloads": -1, "filename": "unsonic-0.1b12.tar.gz", "has_sig": false, "md5_digest": "2019f4765787bb104a2c37249dbfdea1", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 216114, "upload_time": "2017-10-09T00:52:51", "url": "https://files.pythonhosted.org/packages/ef/cd/34161ac68c6f1a8bfb22d238fcde5ec09ea84f81cac24da68cff4785fa2c/unsonic-0.1b12.tar.gz" } ], "0.1b13": [ { "comment_text": "", "digests": { "md5": "bd79f84e4a4be98721f808bd4c04b6ce", "sha256": "73770aacd129ba1ad237f1210fac2d0dc5a0a21964b9e1d514decdfd2721905c" }, "downloads": -1, "filename": "unsonic-0.1b13.tar.gz", "has_sig": false, "md5_digest": "bd79f84e4a4be98721f808bd4c04b6ce", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 216142, "upload_time": "2017-10-09T01:07:04", "url": "https://files.pythonhosted.org/packages/3c/52/08bf78e2d3bfea89b61d04ba47ba1527541cc0f3e8c0cb70bc25a8f6200f/unsonic-0.1b13.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "2c6f42128d3441cf1a27224ff4cf5f7a", "sha256": "41ae768218b9af66887b2c30b0f43e40b232dc9ace4ab6f12dda28547b27ed33" }, "downloads": -1, "filename": "unsonic-0.1.3.tar.gz", "has_sig": false, "md5_digest": "2c6f42128d3441cf1a27224ff4cf5f7a", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 215784, "upload_time": "2018-01-31T00:54:07", "url": "https://files.pythonhosted.org/packages/c3/b7/4ce1157c9dedae4576ec435febb0b6e1e841965421c2294e58d7f79aba8a/unsonic-0.1.3.tar.gz" } ] }