Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
# sc-gate-dl

Download and tag SoundCloud tracks unlocked via Hypeddit, Droploud, GateRush, DownloadGater, StillHype, Bandcamp, or a direct download link.
Download and tag SoundCloud tracks unlocked via Hypeddit, Droploud, GateRush, DownloadGater, StillHype, PumpYourSound, Bandcamp, or a direct download link.

## Features

- 🎵 Automatically download audio from Hypeddit, Droploud, GateRush, DownloadGater, StillHype, Bandcamp, and direct file links (e.g. Dropbox `dl=1`)
- 🎵 Automatically download audio from Hypeddit, Droploud, GateRush, DownloadGater, StillHype, PumpYourSound, Bandcamp, and direct file links (e.g. Dropbox `dl=1`)
- ⚡ Browserless fast path that skips the browser for gates that don't need real verification (see [How It Works](#how-it-works))
- 🔄 Handles multiple gate types (see [How It Works](#how-it-works))
- 📝 Fetches metadata from the provided SoundCloud link
Expand Down Expand Up @@ -199,7 +199,7 @@ Panel size/position is remembered in `localStorage` (`sc-gate-dl-panel-geom`).
- Spotify gate: Authorizes Spotify access
- Download gate: Triggers the audio download

Droploud, GateRush, DownloadGater, and StillHype gates are handled via their own downloaders with similar email / social unlock flows. StillHype requires a real SoundCloud OAuth connection (follow / like / repost / comment are verified server-side).
Droploud, GateRush, DownloadGater, StillHype, and PumpYourSound gates are handled via their own downloaders with similar email / social unlock flows. StillHype and PumpYourSound require a real SoundCloud OAuth connection (follow / like / repost / comment are verified server-side). Traditional gate URLs in the track description are preferred over Bandcamp/SoundCloud store links in `purchase_url`.

**Bandcamp / yt-dlp**: When a SoundCloud track’s purchase URL (or description) points at Bandcamp instead of a gate, the file is downloaded with [yt-dlp](https://github.com/yt-dlp/yt-dlp) (browserless). For Bandcamp album links, the matching track is selected from the SoundCloud title; if auto-match fails, the CLI and Web UI let you pick a track from the album. Traditional unlock gates still take priority if both are present. If no gate or Bandcamp URL is found, the CLI and Web UI can fall back to downloading the SoundCloud track itself via yt-dlp.

Expand Down
23 changes: 20 additions & 3 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import { DroploudDownloader } from './droploud';
import { GaterushDownloader } from './gaterush';
import { HypedditDownloader } from './hypeddit';
import { HypedditHttpDownloader } from './hypedditHttp';
import { PumpyoursoundDownloader } from './pumpyoursound';
import { SoundcloudClient } from './soundcloud';
import { StillhypeDownloader } from './stillhype';
import {
Expand Down Expand Up @@ -79,11 +80,11 @@ try {
} else {
gateUrl = await input({
message:
'Enter a Hypeddit, Droploud, GateRush, DownloadGater, Bandcamp, direct download, or smart-link URL',
'Enter a Hypeddit, Droploud, GateRush, DownloadGater, StillHype, PumpYourSound, Bandcamp, direct download, or smart-link URL',
validate: async (value) => {
const resolved = await resolveGateUrlOrFollow(value);
if (!resolved || resolved.provider === 'soundcloud') {
return 'A valid Hypeddit, Droploud, GateRush, DownloadGater, Bandcamp, direct download, or resolvable gate URL is required';
return 'A valid Hypeddit, Droploud, GateRush, DownloadGater, StillHype, PumpYourSound, Bandcamp, direct download, or resolvable gate URL is required';
}
return true;
},
Expand All @@ -105,7 +106,7 @@ try {

if (!gateUrl || !gate) {
throw new Error(
'A valid Hypeddit, Droploud, GateRush, DownloadGater, Bandcamp, direct download, or SoundCloud URL is required',
'A valid Hypeddit, Droploud, GateRush, DownloadGater, StillHype, PumpYourSound, Bandcamp, direct download, or SoundCloud URL is required',
);
}

Expand Down Expand Up @@ -246,6 +247,22 @@ try {
} finally {
await stillhypeDownloader.close();
}
} else if (gate.provider === 'pumpyoursound') {
usedBrowser = true;
const pumpyoursoundDownloader = new PumpyoursoundDownloader(gateConfig);
try {
await pumpyoursoundDownloader.initialize();
if (initializeLogins) {
await pumpyoursoundDownloader.prepareLogins();
if (config) {
await saveConfig({ ...config, initializeLogins: false });
console.log('✓ Updated config.json: initializeLogins set to false');
}
}
downloadFilename = await pumpyoursoundDownloader.downloadAudio(gateUrl);
} finally {
await pumpyoursoundDownloader.close();
}
} else {
// Hypeddit: always try plain HTTP first (email + social skip gates).
const httpDownloader = new HypedditHttpDownloader(gateConfig);
Expand Down
Loading