Skip to content

2Xsave/sksave

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🎧 sksave_core

Rust-библиотека и CLI для скачивания треков SoundCloud (MP3)

CI License: MIT Crate

✨ Возможности

  • Скачивание треков в MP3 по публичной ссылке
  • Извлечение метаданных через window.__sc_hydration
  • Поддержка progressive streams (прямое скачивание MP3)
  • Повторные попытки с джиттером и управление таймаутами
  • Python-биндинги через pyo3/maturin

🚀 Быстрый старт (CLI)

cargo run --release -- https://soundcloud.com/artist/track-name

Полный пример с указанием директории:

cargo run --release -- \
  https://soundcloud.com/artist/track-name \
  --output-root downloads

Аргументы

Аргумент Описание
url Публичная ссылка на трек (обязателен)
--output Желаемое имя файла или каталога
--output-root Корень файлов выгрузки
--config Явный путь к JSON-конфигу
--skip-check Пропустить предварительную проверку

🦀 Rust API

use sksave_core::{execute_download, DownloadRequest};

let request = DownloadRequest {
    url: "https://soundcloud.com/artist/track-name".to_string(),
    output: None,
    skip_check: false,
    output_root: None,
    config_path: None,
    runtime_config: None,
    max_size_mb: None,
};

let outcome = execute_download(request).await?;

🐍 Python API

Сборка Python-модуля:

cargo build --release --features python
# либо используйте maturin для упаковки в wheel
maturin develop

Использование:

from sksave_core import download_as_files, download_as_binary

files = download_as_files(url="https://soundcloud.com/artist/track-name")

binary = download_as_binary(url="https://soundcloud.com/artist/track-name")
for asset in binary.assets:
    print(asset.filename, len(asset.content))

download_as_binary не создаёт файлы на диске — все данные живут в памяти. download_as_files сохраняет MP3 и metadata.json рядом с ассетами.

⚙️ Конфигурация

Настройки берутся из soundcloud_config.json (путь можно переопределить через SOUNDCLOUD_CONFIG_PATH).

Пример конфига:

{
  "cookies": {},
  "proxies": ["socks5://127.0.0.1:9050"],
  "max_retries": 3,
  "retry_backoff": 1.25,
  "request_timeout": 15.0,
  "output_dir": "downloads"
}

Переменные окружения

Переменная Описание
SOUNDCLOUD_CONFIG_PATH Путь к JSON-конфигу
SKSAVE_COOKIES_JSON JSON-строка с парами cookie
SKSAVE_COOKIE Простая строка "a=b; c=d"
SKSAVE_PROXIES Список прокси через запятую
SKSAVE_MAX_RETRIES Количество попыток повтора HTTP
SKSAVE_RETRY_BACKOFF Базовая задержка между повторами (секунды)
SKSAVE_REQUEST_TIMEOUT Таймаут запроса (секунды)
SKSAVE_ACCEPT_LANGUAGE Значение заголовка Accept-Language

Приоритет: переменные окружения → значения из файла → значения по умолчанию.

📄 Лицензия

MIT — см. LICENSE.

About

SoundCloud track downloader core — Rust async library and CLI

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages