{"id":13397513,"url":"https://github.com/jkbrzt/cloudtunes","last_synced_at":"2025-12-16T18:57:43.739Z","repository":{"id":20512923,"uuid":"23791610","full_name":"jkbrzt/cloudtunes","owner":"jkbrzt","description":"Web-based music player for the cloud :cloud: :notes: Play music from YouTube, Dropbox, etc.","archived":false,"fork":false,"pushed_at":"2023-08-26T13:17:48.000Z","size":12905,"stargazers_count":2506,"open_issues_count":21,"forks_count":232,"subscribers_count":101,"default_branch":"master","last_synced_at":"2025-10-09T03:05:00.576Z","etag":null,"topics":["backbone","coffeescript","dropbox","jakubroztocil","lastfm","mongodb","music","music-player","musicbrainz","python","redis","spa","web","webapp","websocket","youtube"],"latest_commit_sha":null,"homepage":"https://twitter.com/jakubroztocil","language":"CoffeeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jkbrzt.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null},"funding":{"github":"jakubroztocil"}},"created_at":"2014-09-08T13:26:38.000Z","updated_at":"2025-10-04T15:34:59.000Z","dependencies_parsed_at":"2024-01-13T19:24:01.952Z","dependency_job_id":"7f337aff-c7a1-4dc9-a923-468324ef576f","html_url":"https://github.com/jkbrzt/cloudtunes","commit_stats":null,"previous_names":["jkbrzt/cloudtunes","jakubroztocil/cloudtunes"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/jkbrzt/cloudtunes","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jkbrzt%2Fcloudtunes","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jkbrzt%2Fcloudtunes/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jkbrzt%2Fcloudtunes/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jkbrzt%2Fcloudtunes/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jkbrzt","download_url":"https://codeload.github.com/jkbrzt/cloudtunes/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jkbrzt%2Fcloudtunes/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":27769762,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-12-16T02:00:10.477Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["backbone","coffeescript","dropbox","jakubroztocil","lastfm","mongodb","music","music-player","musicbrainz","python","redis","spa","web","webapp","websocket","youtube"],"created_at":"2024-07-30T18:01:27.934Z","updated_at":"2025-12-16T18:57:43.720Z","avatar_url":"https://github.com/jkbrzt.png","language":"CoffeeScript","funding_links":["https://github.com/sponsors/jakubroztocil"],"categories":["CoffeeScript","Apps","music","Media Streaming","媒体流"],"sub_categories":["MediaManagement","Audio Streaming","语音流"],"readme":"# CloudTunes\n\n**Open source, web-based music player for the cloud.** \n\u003cbr/\u003e\nAlso on: [Facebook](https://www.facebook.com/cloudtunes \"/cloudtunes\") •\n[Twitter](https://twitter.com/cloudtunesapp \"@cloudtunesapp\") •\n[Hacker News](https://news.ycombinator.com/item?id=8284785 \"Hacker News discussion\") •\n[Lifehacker](http://lifehacker.com/cloudtunes-is-an-elegant-music-player-for-all-your-drop-1633003677)\n\n![screenshot](screenshots/Homepage.png)\n\n\nCloudTunes provides a unified interface \nfor music stored in the cloud (YouTube, Dropbox, etc.) and integrates with \n[Last.fm](http://www.last.fm/api), Facebook, \nand [Musicbrainz](https://musicbrainz.org/) for metadata, discovery, \nand social experience. It is similar to services like Spotify, \nexcept instead of local tracks and the fixed Spotify catalog, \nCloudTunes uses your files stored in Dropbox and music videos on YouTube.\n\n\n![screenshot](screenshots/Collection.png)\n![screenshot](screenshots/Explore.png)\n![screenshot](screenshots/Settings-Social.png)\n\n\n## The Story\n\nCloudTunes is a side project of \n[@jkbrzt](https://twitter.com/jkbrzt) who is a bit of a \n[music nerd](http://last.fm/user/oswaldcz) and who likes to \n[build stuff](https://github.com/jkbrzt). In 2012 he decided \nto create an iTunes-like webapp to **make music stored all over the cloud \neasily discoverable and accessible:** hence *CloudTunes*. \n\nAnother one of the goals was to experiment with a bunch of new technologies.\nLater, this side-project was largely abandoned due to other more pressing \nprojects. In the autumn of 2014, CloudTunes was open-sourced *\"as is\"* \n(i.e. alpha quality, lack of polish, tests and docs).\n\n\n## Technology\n\nThe architecture consists of a server and client component. Those two are \ndecoupled and communicate via a JSON REST API and a WebSocket connection:\n\n\n### [`cloudtunes-server`](cloudtunes-server)\n\n**Web and WebSocket server, worker processes.**\nWritten in **Python,** uses Tornado, Celery, Mongo DB, MongoEngine, Redis.\n\n\n### [`cloudtunes-webapp`](cloudtunes-webapp) \n**Single-page app.** Written in **CoffeeScript and Sass,** uses Brunch, \nBackbone.js, SocketIO, Handlebars, Compass, SoundManager.\n\n\n\n## Features\n\n### Discographies \u0026 Entire Albums\n\nFind and stream entire albums from YouTube.\n\n![screenshot](screenshots/Artist-Discography.png)\n![screenshot](screenshots/Artist-Top-Videos.png)\n![screenshot](screenshots/Artist-Related.png)\n![screenshot](screenshots/Search.png)\n\nAny album or track you like can be added to your collection or any of your playlists.\n\n![screenshot](screenshots/DnD-Album.png)\n\n\n### Dropbox Integration\n\nAccess and stream **music that you already have in Dropbox** from any computer.\nFast indexing and realtime updates.\n \n![screenshot](screenshots/Dropbox.png)\n\n\n![screenshot](screenshots/Dropbox-Sync.png)\n\n\n### Playlists\n\nOrganise your collection with playlists. Drag and drop tracks and \nalbums on a playlist to add them. You can create playlists containing both tracks from your Dropbox and music videos from YouTube.\n\n![screenshot](screenshots/DnD.png)\n![screenshot](screenshots/Playlist.png)\n\n\n### Last.fm Support\n\nScrobble and play your personalised recommendations. \n\n![screenshot](screenshots/Scrobbling.png)\n![screenshot](screenshots/Explore-Trending.png)\n\n\n### Notifications\n\n![Notifications](screenshots/Settings-Notifications.png)\n![Notifications](screenshots/Notification.png)\n![Notifications](screenshots/Notification-Confirm.png)\n\n### Settings\n\n![Notifications](screenshots/Settings.png)\n\n\n### Miscellaneous\n\n* Drag and drop\n* Keyboard shortcuts\n* Browse view\n* Sorting, resizing\n* Support for 10s of 1000s of tracks in collection\n\n\n## Installation\n\n1. Clone this repository:\n\n  ```bash\n  $ git clone https://github.com/jkbrzt/cloudtunes.git\n  $ cd cloudtunes\n  ```\n\n2. Use [`cloudtunes-server/cloudtunes/settings/local.example.py`](cloudtunes-server/cloudtunes/settings/local.example.py) as a template and fill in the `None`'s:\n\n  ```bash\n  $ cp  cloudtunes-server/cloudtunes/settings/local.example.py cloudtunes-server/cloudtunes/settings/local.py\n  $ vim cloudtunes-server/cloudtunes/settings/local.py\n  ```\n3. Decide whether to continue with or without Docker and follow the specific instructions below.\n\n### Without Docker\n\nContinue by following the instructions in:\n\n* [`cloudtunes-server/README`](cloudtunes-server)\n* [`cloudtunes-webapp/README`](cloudtunes-webapp)\n\n### With Docker\n\nThe easiest way to run CloudTunes is in an isolated \n[Docker](https://docker.com/whatisdocker/) container. Like this, \nthe only thing you need to install directly on your system is Docker \n(or `boot2docker`) itself.\n\nPlease follow the \n[installation instructions](https://docs.docker.com/installation/#installation) \non how to install Docker (or `boot2docker`) on your system. Then follow the\nsteps bellow:\n\n\n1.  **Build** a Docker image according to our [`Dockerfile`](Dockerfile) \n  and name it `cloudtunes-img`. This takes a long time the first time\n  it's run:\n\n  ```bash\n  $ docker build --tag=cloudtunes-img .\n  ```\n\n2. **Verify** that the image has been created:\n\n  ```bash\n  $ docker images\n  REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE\n  cloudtunes-img      latest              e1bcb48ab148        About an hour ago   995.1 MB\n  ```\n\n3. **Create** a new container named `cloudtunes ` from the `cloudtunes-img` \n  image and run the app in it:\n\n  ``` bash\n  $ docker run --name=cloudtunes --publish=8000:8000  --detach --tty cloudtunes-img\n  ```\n\n4. **Verify** the container is running:\n\n  ```bash\n  $ docker ps\n  CONTAINER ID        IMAGE                   COMMAND                CREATED             STATUS              PORTS                    NAMES\n  564cc245e6dd        cloudtunes-img:latest   \"supervisord --nodae   52 minutes ago      Up 2 minutes        0.0.0.0:8000-\u003e8000/tcp   cloudtunes\n  \n  ```\n  \n5. Now CloudTunes should be running in the Docker container on port `8000`. \n  The full URL depends on the method you used to install Docker:\n\n  * If you have installed **Docker directly** on your system, the full \n    URL will simply be: [`http://localhost:8000/`](http://localhost:8000/)\n  * If you have used **`boot2docker`,** then run `$ boot2docker ip` \n    to find out the IP address under which the app is available, \n    and the full URL will be `http://\u003cboot2docker IP\u003e:8000/`\n\n\nTo stop the app (Docker container), run:\n\n```bash\n$ docker stop cloudtunes\n```\n\nTo start it again, run:\n```bash\n$ docker start cloudtunes\n```\n\nAll user data (stored by MongoDB and Redis under `/data`) will persist until the container has been deleted.  \n\nAfter you have made any changes to the codebase or configuration and \nwant them to be applied to the container, or if you simply wish to start \nfrom scratch again, run the following commands to delete the \nexisting container (*this will also delete all user data in it*):\n\n```bash\n$ docker stop cloudtunes\n$ docker rm cloudtunes\n```\n\nAnd then start again from step 1. above (it should go much faster this time).\n\n## License\n\nBSD. See [LICENSE](LICENSE) for more details.\n\n## Contact \n\nJakub Roztočil\n\n* [https://github.com/jkbrzt](https://github.com/jkbrzt)\n* [https://twitter.com/jkbrzt](https://twitter.com/jkbrzt)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjkbrzt%2Fcloudtunes","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjkbrzt%2Fcloudtunes","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjkbrzt%2Fcloudtunes/lists"}