{"id":25158456,"url":"https://github.com/raiper34/spooty","last_synced_at":"2026-04-18T13:01:51.843Z","repository":{"id":245574751,"uuid":"818654959","full_name":"Raiper34/spooty","owner":"Raiper34","description":"Self-hosted  spotify downloader","archived":false,"fork":false,"pushed_at":"2026-02-07T22:26:01.000Z","size":1794,"stargazers_count":1168,"open_issues_count":15,"forks_count":57,"subscribers_count":5,"default_branch":"main","last_synced_at":"2026-03-29T14:50:40.749Z","etag":null,"topics":["downloader","music","self-hosted","spotify"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Raiper34.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-06-22T13:13:44.000Z","updated_at":"2026-03-29T03:56:13.000Z","dependencies_parsed_at":"2025-01-26T22:22:02.358Z","dependency_job_id":"4f20323b-a71f-4f7d-83f4-4eed37bc84ab","html_url":"https://github.com/Raiper34/spooty","commit_stats":null,"previous_names":["raiper34/spooty"],"tags_count":21,"template":false,"template_full_name":null,"purl":"pkg:github/Raiper34/spooty","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Raiper34%2Fspooty","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Raiper34%2Fspooty/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Raiper34%2Fspooty/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Raiper34%2Fspooty/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Raiper34","download_url":"https://codeload.github.com/Raiper34/spooty/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Raiper34%2Fspooty/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31969772,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-18T00:39:45.007Z","status":"online","status_checked_at":"2026-04-18T02:00:07.018Z","response_time":103,"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":["downloader","music","self-hosted","spotify"],"created_at":"2025-02-09T01:51:46.088Z","updated_at":"2026-04-18T13:01:51.828Z","avatar_url":"https://github.com/Raiper34.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![npm version](https://img.shields.io/docker/pulls/raiper34/spooty)](https://hub.docker.com/r/raiper34/spooty)\n[![npm version](https://img.shields.io/docker/image-size/raiper34/spooty)](https://hub.docker.com/r/raiper34/spooty)\n![Docker Image Version](https://img.shields.io/docker/v/raiper34/spooty)\n[![npm version](https://img.shields.io/docker/stars/raiper34/spooty)](https://hub.docker.com/r/raiper34/spooty)\n[![GitHub License](https://img.shields.io/github/license/raiper34/spooty)](https://github.com/Raiper34/spooty)\n[![GitHub Repo stars](https://img.shields.io/github/stars/raiper34/spooty)](https://github.com/Raiper34/spooty)\n\n![spooty logo](assets/logo.svg)\n# Spooty - selfhosted Spotify downloader\nSpooty is a self-hosted Spotify downloader.\nIt allows download track/playlist/album from the Spotify url.\nIt can also subscribe to a playlist or author page and download new songs upon release.\nSpooty basically downloads nothing from Spotify, it only gets information from spotify and then finds relevant and downloadeds music on Youtube. \nThe project is based on NestJS and Angular.\n\n\u003e [!IMPORTANT]\n\u003e Please do not use this tool for piracy! Download only music you own rights! Use this tool only on your responsibility.\n\n### Content\n- [🚀 Installation](#-installation)\n  - [Spotify App Configuration](#spotify-app-configuration)\n  - [Docker](#docker)\n    - [Docker command](#docker-command)\n    - [Docker compose](#docker-compose)\n  - [Build from source](#build-from-source)\n    - [Process](#requirements)\n    - [Requirements](#process)\n  - [Environment variables](#environment-variables)\n- [⚖️ License](#-license)\n\n## 🚀 Installation\nRecommended and the easiest way how to start to use of Spooty is using docker.\n\n### Spotify App Configuration\n\nTo fully use Spooty, you need to create an application in the Spotify Developer Dashboard:\n\n1. Go to [Spotify Developer Dashboard](https://developer.spotify.com/dashboard)\n2. Sign in with your Spotify account\n3. Create a new application\n4. Note your `Client ID` and `Client Secret`\n5. Configure the redirect URI to `http://127.0.0.1:3000/api/callback` (or the corresponding URL of your instance)\n\nThese credentials will be used by Spooty to access the Spotify API.\n\n### Docker\n\nJust run docker command or use docker compose configuration.\nFor detailed configuration, see available [environment variables](#environment-variables).\n\n#### Docker command\n```shell\ndocker run -d -p 3000:3000 \\\n  -v /path/to/downloads:/spooty/backend/downloads \\\n  -e SPOTIFY_CLIENT_ID=your_client_id \\\n  -e SPOTIFY_CLIENT_SECRET=your_client_secret \\\n  raiper34/spooty:latest\n```\n\n#### Docker compose\n```yaml\nservices:\n  spooty:\n    image: raiper34/spooty:latest\n    container_name: spooty\n    restart: unless-stopped\n    ports:\n      - \"3000:3000\"\n    volumes:\n      - /path/to/downloads:/spooty/backend/downloads\n    environment:\n      - SPOTIFY_CLIENT_ID=your_client_id\n      - SPOTIFY_CLIENT_SECRET=your_client_secret\n      # Configure other environment variables if needed\n```\n\n### Build from source\n\nSpooty can be also build from source files on your own.\n\n#### Requirements\n- Node v20.20.0 (it is recommended to use `nvm` node version manager to install proper version of node)\n- Redis in memory cache\n- Ffmpeg\n- Python3\n\n#### Process\n- install Node v20.20.0 using `nvm install` and use that node version `nvm use`\n- from project root install all dependencies using `npm install`\n- copy `.env.default` as `.env` in `src/backend` folder and modify desired environment properties (see [environment variables](#environment-variables))\n- add your Spotify application credentials to the `.env` file:\n  ```\n  SPOTIFY_CLIENT_ID=your_client_id\n  SPOTIFY_CLIENT_SECRET=your_client_secret\n  ```\n- build source files `npm run build`\n    - built project will be stored in `dist` folder\n- start server `npm run start`\n\n### Environment variables\n\nSome behaviour and settings of Spooty can be configured using environment variables and `.env` file.\n\n Name                 | Default                                     | Description                                                                                                                                   |\n----------------------|---------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------|\n DB_PATH              | `./config/db.sqlite` (relative to backend)  | Path where Spooty database will be stored                                                                                                     |\n FE_PATH              | `../frontend/browser` (relative to backend) | Path to frontend part of application                                                                                                          |\n DOWNLOADS_PATH       | `./downloads` (relative to backend)         | Path where downaloded files will be stored                                                                                                    |\n FORMAT               | `mp3`                                       | Format of downloaded files ('aac', 'flac', 'mp3', 'm4a', 'opus', 'vorbis', 'wav', 'alac')                                                     |\n QUALITY              | undefined                                   | Audio quality (0-9 VBR or specific bitrate) of downloaded files                                                                               |\n PORT                 | 3000                                        | Port of Spooty server                                                                                                                         |\n REDIS_PORT           | 6379                                        | Port of Redis server                                                                                                                          |\n REDIS_HOST           | localhost                                   | Host of Redis server                                                                                                                          |\n RUN_REDIS            | false                                       | Whenever Redis server should be started from backend (recommended for Docker environment)                                                     |\n SPOTIFY_CLIENT_ID    | your_client_id                              | Client ID of your Spotify application (required)                                                                                              |\n SPOTIFY_CLIENT_SECRET| your_client_secret                          | Client Secret of your Spotify application (required)                                                                                          |\n YT_DOWNLOADS_PER_MINUTE | 3                                           | Set the maximum number of YouTube downloads started per minute                                                                                |\n YT_COOKIES           |                                             | Allows you to pass your YouTube cookies to bypass some download restrictions. See [below](#how-to-get-your-youtube-cookies) for instructions. |\n\n### How to get your YouTube cookies (using browser dev tools):\n1. Go to https://www.youtube.com and log in if needed.\n2. Open the browser developer tools (F12 or right click \u003e Inspect).\n3. Go to the \"Application\" tab (in Chrome) or \"Storage\" (in Firefox).\n4. In the left menu, find \"Cookies\" and select https://www.youtube.com.\n5. Copy all the cookies (name=value) and join them with a semicolon and a space, like:\n   VISITOR_INFO1_LIVE=xxxx; YSC=xxxx; SID=xxxx; ...\n6. Paste this string into the YT_COOKIES environment variable (in your .env or Docker config).\n\n# ⚖️ License\n[MIT](https://choosealicense.com/licenses/mit/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fraiper34%2Fspooty","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fraiper34%2Fspooty","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fraiper34%2Fspooty/lists"}