# Ripster A self-hosted desktop app for downloading music from **Apple Music, Qobuz, Deezer, Tidal, Beatport, SoundCloud, Yandex Music and JioSaavn**, plus **Spotify** link conversion (it finds the same release on a service you have access to and grabs that). It runs entirely on your own machine and opens in its own window โ€” there is no account with *us*, no cloud, and your files never leave your computer. > You need your own valid subscriptions / credentials for each service you use. > Ripster automates downloading from services **you already pay for** โ€” it does > not provide accounts and does not bypass paid tiers. --- ## Contents - [What you get](#what-you-get) - [Install on Windows (the easy way)](#install-on-windows-the-easy-way) - [First launch](#first-launch) - [Downloading your first track](#downloading-your-first-track) - [Where your music is saved](#where-your-music-is-saved) - [Connecting each service](#connecting-each-service) - [Choosing quality](#choosing-quality) - [Optional components (Setup tab)](#optional-components-setup-tab) - [Updating Ripster](#updating-ripster) - [Troubleshooting](#troubleshooting) - [Running from source (advanced)](#running-from-source-advanced) - [Credits](#credits) - [Disclaimer & License](#disclaimer--license) --- ## What you get - ๐ŸŽš **Many services & qualities** โ€” ALAC / AAC / Dolby Atmos for Apple Music, FLAC up to 24-bit/192 kHz for Qobuz / Deezer / Tidal, lossless SoundCloud, Beatport, Yandex Music, and Spotify link conversion. - ๐Ÿ” **Download queue** with parallel downloads, automatic retry, and recovery of partially-finished albums. - ๐Ÿ” **Search** across services, plus a **watchlist** and a full **download history**. - ๐Ÿฆ **Ripster Radar** โ€” a release-tracking feed for the artists you follow on Spotify. It's not just a periodic re-scan: it also hooks the same personalized "new for you" signal Spotify's own app uses, so a fresh drop can show up within minutes instead of the next scheduled pass โ€” flagged with its own **โšก Live** badge on the card. - ๐ŸŽ› **DJ Coder** โ€” stitch a multi-track release into one gapless mix with a CUE sheet. - ๐Ÿ“Š **Spectrogram** view to confirm a file is really lossless (and not an upscaled fake). - ๐ŸŽง Built-in **gapless player** with a visualizer, and a **timed tracklist** for DJ mixes / radio shows (SoundCloud) โ€” click through to any track inside a 2-hour set instead of scrubbing blind. - ๐Ÿ”Š **Bit-perfect output** (**Settings โ†’ Player**) โ€” an exclusive-mode path that hands the device the file's own rate, with no Windows mixer in between, and reports what the device actually granted rather than what was asked for. A browser tab cannot do this. - ๐Ÿ“ป **Stations** โ€” genre radio built from the artists who actually make that genre (a track is only allowed in when its genre is confirmed, so a title that merely contains the word "techno" never sneaks in), and it **learns from how you listen**: a skip in the first seconds pushes an artist down, a track you finish or download pushes them up, a disliked track never returns, and nothing repeats for a week. All of it is computed and stored **on your own machine** โ€” your taste never leaves it, and guests listening through your instance never shape it. - ๐ŸŽจ **Skins** โ€” `Neon`, `Console` (dense, sharp, built for thousands of cards) and `OLED Noir`, on top of the five colour themes. They change radius, density, surface and glow, not just the palette; the default look is untouched. - ๐Ÿ—‚ **Queue tree** โ€” expand an album in the queue to see each track with its own progress line. - ๐Ÿ‡ฎ๐Ÿ‡ณ **JioSaavn** โ€” search, album and artist pages, downloads where the service is licensed (audio is region-locked outside India; Ripster says so honestly instead of saving a broken file). - ๐Ÿ“… **BBC Sounds tracklists** โ€” timed tracklists for radio shows, verified against the DJ and the broadcast date, so an Essential Mix never gets another DJ's set. - ๐ŸŽš **DJ Coder, honest audio** โ€” CUE splitting is sample-exact (no duplicated overlap at the seams) and 24โ†’16 bit conversion is dithered rather than truncated. - ๐Ÿ‘ฅ **Multiple accounts per service** โ€” drag them into the order you want, or let Ripster pick the one that actually has the better plan. - ๐ŸŒ **5-language interface** โ€” English, Russian, Hindi, Japanese, Chinese. - ๐Ÿ–ฅ Opens in a **real desktop window** (no browser tab needed). --- ## Screenshots | Ripster Radar | Search | Settings | |---|---|---| | [![Ripster Radar](screenshots/01_release_radar.png)](screenshots/01_release_radar.png) | [![Search](screenshots/02_search.png)](screenshots/02_search.png) | [![Settings](screenshots/03_settings.png)](screenshots/03_settings.png) | | Timed tracklist (SoundCloud mixes) | |---| | [![Timed tracklist](screenshots/04_sc_tracklist.png)](screenshots/04_sc_tracklist.png) | --- ## Install on Windows (the easy way) 1. Go to the **[Releases](https://github.com/Raccoon-Trashpanda/Raccoon-Ripster/releases)** page and download the latest **`RipsterSetup-.exe`**. 2. Run it. Windows SmartScreen may warn "unknown publisher" โ€” that is expected for a small unsigned app. Click **More info โ†’ Run anyway**. 3. Pick an install folder (the default is fine) and click **Install**. The installer copies a self-contained Python and all dependencies โ€” **no separate Python install, no admin rights, no internet downloads during setup.** 4. When it finishes you get a **Ripster** shortcut on the Desktop and Start menu. > **Installing over an older version?** Just run the new installer into the > **same folder** โ€” it upgrades in place. Your settings, logins, and downloaded > music are kept. You do **not** need to uninstall the old version first. --- ## First launch Double-click the **Ripster** shortcut. The app opens in its own desktop window (it uses the built-in Edge WebView; if that is missing it falls back to your default browser at **http://127.0.0.1:7799**). The first time, it creates a `config.yaml` from the bundled example with sensible defaults โ€” Apple Music in ALAC via a free public decryption service, queue auto-start on, two parallel downloads. You can change everything later in the **Settings** tab. > If you ever open it in a browser, always use **`http://127.0.0.1:7799`** and > **not** `http://localhost:7799` โ€” Spotify's login rejects `localhost`. --- ## Downloading your first track 1. Copy a link from any supported service (e.g. an Apple Music album page, a Qobuz album, a Tidal track, a Spotify playlistโ€ฆ), **or** use the **Search** tab to find a release. 2. Paste the link into the box at the top and press **Download** (or just hit Enter). 3. The release appears in the **Queue** and starts downloading. Albums and playlists are automatically expanded into one entry per track, with a live progress bar. 4. When it is done it shows up in **History**, and the files are on your disk. That's it โ€” no token needed for Apple Music ALAC (it uses a free public decryption service out of the box). --- ## Where your music is saved By default everything lands in a **`downloads`** folder inside your Ripster install folder, organized by quality / service / artist / album. For example, an Apple Music lossless album ends up at: ``` \downloads\ALAC (Lossless)\\\01 - Track.m4a ``` You can change the destination any time in **Settings โ†’ Save path** (set it to, say, `D:\Music` or your existing library folder). Each service also has its own path override in Settings if you want them separated. --- ## Connecting each service Most services need *your* credentials. You enter them once in **Settings**; they are stored locally in `config.yaml` and never sent anywhere except to that service. Leave a service blank to skip it. | Service | What you need | Where to get it | |---------|---------------|-----------------| | **Apple Music** | Nothing for standard ALAC/Atmos (a free public decryption service is used). For account-specific features: `media-user-token` + `authorization-token`. | The **"Login via Apple"** button in Settings, or your browser DevTools on music.apple.com. | | **Qobuz** | Auth token, or email + password. | Your Qobuz account. | | **Deezer** | The `arl` cookie. | deezer.com โ†’ browser DevTools โ†’ Application โ†’ Cookies โ†’ `arl`. | | **Tidal** | One-time device login. | The **device-login button** in Settings (it stays logged in and refreshes itself). | | **Spotify** | Client ID + Client Secret (used to read metadata and convert links โ€” the audio comes from another service you have). | developer.spotify.com โ†’ create an app โ†’ set redirect URI to `http://127.0.0.1:7799/spotify/callback`. | | **SoundCloud** | OAuth token. | From your logged-in browser session. | | **Beatport / Yandex** | Account login / OAuth token. | Entered in Settings; see the in-app hints. | > **Apple Music tip:** for plain lossless (ALAC) you do **not** need any token or > VPN. The public service carries its own access. A token is only needed for > account-tied extras. --- ## Choosing quality Open **Settings โ†’ Quality** (or pick a quality on each download). Typical picks: - **Apple Music:** `ALAC` (lossless, up to 24-bit) ยท `AAC` (256 kbps) ยท `Dolby Atmos`. - **Qobuz / Tidal / Deezer:** `FLAC` up to 24-bit/192 kHz (subject to what the release and your subscription allow). - **SoundCloud:** lossless where available, otherwise the highest AAC. You can also set a global **output format** (e.g. always transcode to MP3 or FLAC) under Settings โ€” leave it as *native* to keep the original. --- ## Optional components (Setup tab) Some heavyweight tools are **not** bundled (to keep the installer small) and are fetched on demand from the **Setup** tab โ€” each as its own row with its own button and status: - **Apple Go downloader**, **ffmpeg**, **Bento4** (for Apple lossless decrypt) - **Node.js + SoundCloud (Lucida)** components - **OrpheusDL** (Beatport / Spotify metadata engine) - Your own **Widevine device** for protected streams In most cases you don't have to touch this โ€” Ripster installs what a download needs automatically the first time it needs it (for example, the Apple lossless tools are pulled in on your first ALAC download). --- ## Updating Ripster There are two ways to update: 1. **In-app (recommended):** open the **Setup** tab and use **Check for updates โ†’ Update now**. Ripster downloads the newest release and applies it in place, keeping your settings, logins, and music, then restarts. A small badge on the Setup tab tells you when a new version is available. 2. **Reinstall:** download the newest `RipsterSetup-.exe` from [Releases](https://github.com/Raccoon-Trashpanda/Raccoon-Ripster/releases) and run it into the same folder (upgrade in place โ€” nothing is lost). --- ## Troubleshooting **The window won't open / nothing happens.** Make sure no other copy is already running (look for a Ripster icon in the tray / task manager). If a browser opens instead of a window, your system is missing the Edge WebView2 runtime โ€” install it from Microsoft, or just use the browser at `http://127.0.0.1:7799`. **Apple lossless (ALAC) fails at "Decrypting songโ€ฆ".** The lossless decrypt tools (Bento4) are installed automatically on the first ALAC download. If it still fails, open **Setup โ†’ Bento4** and install it manually, and check your internet/firewall isn't blocking the download. This is **not** a token or VPN problem โ€” standard ALAC needs neither. **A download stops partway / "partial".** Ripster retries automatically. A persistent partial usually means the release is region-locked, or a free public service was momentarily overloaded โ€” try again, or pick standard quality instead of Hi-Res for very large files on a slow connection. Use the **โ†บ retry** button on the queue entry. **Spotify says 403 / login rejected.** Spotify needs a Premium account on the app owner's side and the exact redirect URI `http://127.0.0.1:7799/spotify/callback` in your developer dashboard. Always use `127.0.0.1`, never `localhost`. **Where did my files go?** See [Where your music is saved](#where-your-music-is-saved) โ€” by default the `downloads` folder inside your install folder. The exact path of any finished download is also recorded in **History**. **Still stuck?** The **Console** tab has a live log with **Copy** and **Download log** buttons โ€” grab that when reporting an issue. --- ## Running from source (advanced) **Windows only** โ€” the packaged installer and the tooling Ripster automates (the Apple decrypt wrapper, WebView2, etc.) are Windows-specific. There is no macOS or Linux build. You need **Python 3.12** (3.11+ should work) and **ffmpeg** on your `PATH`. ```bat git clone https://github.com/Raccoon-Trashpanda/Raccoon-Ripster.git cd Raccoon-Ripster run.bat ``` `run.bat` creates a virtual environment, installs dependencies, copies `config.example.yaml` โ†’ `config.yaml` on first run, and launches the app. **Pinned dependencies (don't loosen):** `streamrip==2.0.5` (2.1.x has Tidal/login regressions) and `protobuf==6.33.4` (required by the Apple wrapper and the OrpheusDL / Widevine gencode). See `requirements.txt`. --- ## Credits Ripster is a user-interface and orchestration layer โ€” the heavy lifting is done by the excellent open-source projects below. **Huge thanks to every author and contributor.** If your project is used here and you'd like the credit adjusted or removed, please open an issue. The full attribution list โ€” including which projects are *called* versus which code is actually *vendored* โ€” is kept in [CREDITS.md](CREDITS.md). ### Download engines - [zhaarey / apple-music-downloader](https://github.com/zhaarey/apple-music-downloader) โ€” Apple Music in ALAC & Dolby Atmos via a local wrapper *(this project builds on it)* - [glomatico / gamdl](https://github.com/glomatico/gamdl) โ€” Apple Music via account cookies โ€” AAC & music videos - [WorldObservationLog / AppleMusicDecrypt](https://github.com/WorldObservationLog/AppleMusicDecrypt) โ€” Apple Music ALAC/Atmos via the public wrapper pool, called over its Wrapper-Lite HTTP API โ€” no Apple ID - [nathom / streamrip](https://github.com/nathom/streamrip) โ€” Qobuz, Tidal, Deezer, SoundCloud โ€” FLAC up to Hi-Res - [lucida](https://codeberg.org/lucida/lucida) โ€” SoundCloud streaming & downloads - [llistochek / yandex-music-downloader](https://github.com/llistochek/yandex-music-downloader) โ€” Yandex Music FLAC (with Plus) - [OrpheusDL](https://github.com/OrfiTeam/OrpheusDL) + [Dniel97 / orpheusdl-beatport](https://github.com/Dniel97/orpheusdl-beatport) โ€” Beatport & modular Spotify/metadata engine - [zotify-dev / zotify](https://github.com/zotify-dev/zotify) โ€” Spotify downloads via account streaming - [librespot-org / librespot](https://github.com/librespot-org/librespot) & [kokarare1212 / librespot-python](https://github.com/kokarare1212/librespot-python) โ€” open Spotify Connect client - [Nizarberyan / SpotiFLAC](https://github.com/Nizarberyan/SpotiFLAC) โ€” Spotify โ†’ lossless source matching - [deemix](https://pypi.org/project/deemix/) *(RemixDev)* โ€” Deezer download library ### Decryption & wrappers - [itouakirai / wrapper](https://github.com/itouakirai/wrapper) โ€” Apple Music (ALAC) decryption in a Docker container - [WorldObservationLog / wrapper-manager](https://github.com/WorldObservationLog/wrapper-manager) โ€” public wrapper-instance pool - [WorldObservationLog / pywidevine](https://github.com/WorldObservationLog/pywidevine) โ€” Widevine CDM for protected streams - [hyugogirubato / KeyDive](https://github.com/hyugogirubato/KeyDive) & [wvdumper / dumper](https://github.com/wvdumper/dumper) โ€” Widevine L3 device (.wvd) extraction ### Media processing - [FFmpeg](https://ffmpeg.org) โ€” transcoding & muxing of audio/video - [GPAC / MP4Box](https://gpac.io) โ€” MP4 packaging incl. Dolby Atmos - [axiomatic-systems / Bento4](https://github.com/axiomatic-systems/Bento4) โ€” `mp4decrypt` / `mp4extract`, DRM removal - [nilaoda / N_m3u8DL-RE](https://github.com/nilaoda/N_m3u8DL-RE) โ€” HLS segment downloading ### Metadata & search APIs - [iTunes Search API](https://performance-partners.apple.com/search-api) โ€” Apple Music catalog - [Deezer API](https://developers.deezer.com/api) ยท [Qobuz API](https://www.qobuz.com/api.json/0.2) ยท [Tidal API](https://developer.tidal.com/documentation) - [MarshalX / yandex-music-api](https://github.com/MarshalX/yandex-music-api) โ€” Yandex Music search, metadata & token - [MusicBrainz](https://musicbrainz.org/doc/MusicBrainz_API) ยท [Discogs](https://www.discogs.com/developers) ยท [Beatport](https://api.beatport.com) โ€” genre and catalogue data behind Stations - [Odesli / song.link](https://odesli.co) โ€” release identification from a platform link Ripster does not parse itself. Their public API has been closed since 2026-07-31 (`401 PUBLIC_API_ACCESS_DEPRECATED`), so only the identifier is read from the public page โ€” never availability. - [WorldObservationLog / amd.wol.moe](https://amd.wol.moe) โ€” no code taken; the shape of the public pool endpoints (`/status`, `/m3u8`, `/key`, `/license`) and the fact that pool health must be asked of `/status` came from it ### Built with [FastAPI](https://github.com/tiangolo/fastapi) ยท [Uvicorn](https://github.com/encode/uvicorn) ยท [websockets](https://github.com/python-websockets/websockets) ยท [HTTPX](https://github.com/encode/httpx) ยท [Mutagen](https://github.com/quodlibet/mutagen) ยท [PyYAML](https://github.com/yaml/pyyaml) ยท [protobuf](https://github.com/protocolbuffers/protobuf) ยท [pywebview](https://github.com/r0x0r/pywebview) --- ## Disclaimer & License Ripster is **not affiliated with** Apple, Spotify, Qobuz, Tidal, Deezer, SoundCloud, Beatport, or Yandex. All trademarks belong to their respective owners. **For personal use.** Respect the terms of service of each music provider and only download content you are entitled to.