Skip to main content

Automated music discovery and download via Telegram bot. Resolves metadata from Spotify, searches and downloads FLAC from Soulseek (slskd), and organizes your library.

Project description

telegram-slskd-local-bot banner

telegram-slskd-local-bot

License Python Docker Pulls Docker Image Size PyPI codecov

Automated music discovery and download via Telegram bot. Resolves track metadata from Spotify, searches and downloads FLAC files from Soulseek (via slskd), renames them to Artist - Title.flac, and places them in your music library. Docker-ready.


How It Works

You: "Nancy Sinatra Bang Bang"
Bot: Found: Nancy Sinatra - Bang Bang (My Baby Shot Me Down) (2:42)
     Searching slskd for FLAC...
     #1 [free] 2:42 | 16bit/44.1kHz | 30MB
     #2 [free] 2:41 | 16bit/44.1kHz | 28MB
     [Download #1] [Download #2] [Auto-pick best] [Cancel]
You: (taps Download #1)
Bot: Downloaded! Nancy Sinatra - Bang Bang (My Baby Shot Me Down).flac -> /music/

Flow

  1. Send a song name to the Telegram bot (text message)
  2. Bot resolves the track on Spotify (artist, title, duration, album)
  3. Bot searches slskd (Soulseek) for FLAC files matching the track
  4. Results are scored by duration match, audio quality, source reliability, and filename relevance
  5. Bot presents the top matches — you pick one (or enable auto-mode)
  6. File is downloaded, renamed to Artist - Title.flac, and placed in your output directory
  7. Your existing tools (e.g., audio-transcode-watcher, Navidrome) pick it up from there

Quick Start

Prerequisites

Docker Compose

services:
  slskd-importer:
    image: drumsergio/telegram-slskd-local-bot:0.1.0
    container_name: slskd_importer
    restart: unless-stopped
    environment:
      TELEGRAM_BOT_TOKEN: "your-bot-token"
      TELEGRAM_ALLOWED_USERS: "your-telegram-user-id"
      SPOTIFY_CLIENT_ID: "your-spotify-client-id"
      SPOTIFY_CLIENT_SECRET: "your-spotify-client-secret"
      SLSKD_HOST: "http://your-slskd-host:5030"
      SLSKD_API_KEY: "your-slskd-api-key"
    volumes:
      - /path/to/slskd/downloads:/downloads:ro
      - /path/to/music/library:/music
    logging:
      driver: "json-file"
      options:
        max-size: "50m"
        max-file: "3"

Local Development

# Clone the repo
git clone https://github.com/GeiserX/telegram-slskd-local-bot.git
cd telegram-slskd-local-bot

# Create virtual environment
python -m venv venv
source venv/bin/activate

# Install dependencies
pip install -r requirements.txt
pip install -e ".[dev]"

# Copy and configure environment
cp .env.example .env
# Edit .env with your credentials

# Run
python -m music_downloader run

Environment Variables

Variable Required Default Description
TELEGRAM_BOT_TOKEN Yes Telegram bot token from @BotFather
TELEGRAM_ALLOWED_USERS No (open) Comma-separated Telegram user IDs allowed to use the bot
SPOTIFY_CLIENT_ID Yes Spotify Developer app Client ID
SPOTIFY_CLIENT_SECRET Yes Spotify Developer app Client Secret
SLSKD_HOST Yes slskd instance URL (e.g., http://192.168.1.100:5030)
SLSKD_API_KEY Yes slskd API key (Settings > Security > API Keys)
DOWNLOAD_DIR No /downloads Where slskd stores completed downloads (container path)
OUTPUT_DIR No /music Where to place renamed FLAC files (container path)
AUTO_MODE No false Auto-download best match without asking
MAX_RESULTS No 5 Maximum search results shown to user
DURATION_TOLERANCE_SECS No 5 Duration match tolerance in seconds
SEARCH_TIMEOUT_SECS No 30 slskd search timeout
DOWNLOAD_TIMEOUT_SECS No 600 Download completion timeout
EXCLUDE_KEYWORDS No live,remix,... Comma-separated keywords to filter out
FILENAME_TEMPLATE No {artist} - {title} Output filename template
LOG_LEVEL No INFO Logging level
HEALTH_PORT No 8080 Health check HTTP port

Telegram Bot Commands

Command Description
(any text) Search for a song and show download options
/auto Toggle auto-download mode on/off
/status Show active searches and downloads
/history Show recent download history
/help Show help message

Scoring Algorithm

Search results are ranked by:

  1. Duration match (40 pts): Compared to Spotify duration. Within ±5s = perfect, ±10s = acceptable, >30s = excluded
  2. Audio quality (25 pts): Prefers 16-bit/44.1kHz (CD quality) for consistency
  3. Source reliability (20 pts): Free upload slots, fast upload speed, short queue
  4. Filename relevance (15 pts): Artist and title words found in the filename

Results containing excluded keywords (live, remix, etc.) are automatically filtered out, unless the original track title also contains that keyword.

Architecture

┌──────────────────┐     ┌──────────────┐     ┌──────────────────┐
│  Telegram Bot    │────▶│  Spotify API │     │  slskd (Soulseek)│
│  (user input)    │     │  (metadata)  │     │  (search/download)│
└──────────────────┘     └──────────────┘     └──────────────────┘
         │                       │                       │
         ▼                       ▼                       ▼
┌─────────────────────────────────────────────────────────────────┐
│                    Music Downloader Service                      │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌──────────────────┐│
│  │ Resolver │─▶│ Searcher │─▶│  Scorer  │─▶│ File Processor   ││
│  │(Spotify) │  │ (slskd)  │  │(ranking) │  │(rename + move)   ││
│  └──────────┘  └──────────┘  └──────────┘  └──────────────────┘│
└─────────────────────────────────────────────────────────────────┘
                                                      │
                                                      ▼
                                              ┌──────────────┐
                                              │ Music Library │
                                              │  (FLAC files) │
                                              └──────────────┘

Related Projects

Music Pipeline:

Telegram Bots:

License

GPL-3.0

Links

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

telegram_slskd_local_bot-0.10.2.tar.gz (93.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

telegram_slskd_local_bot-0.10.2-py3-none-any.whl (61.8 kB view details)

Uploaded Python 3

File details

Details for the file telegram_slskd_local_bot-0.10.2.tar.gz.

File metadata

File hashes

Hashes for telegram_slskd_local_bot-0.10.2.tar.gz
Algorithm Hash digest
SHA256 fc58fe181e16ff8510faee091d03788d9198ce4143af25882d6b4307820c015e
MD5 840132bc8e0becde64e1f50a2abc58e1
BLAKE2b-256 11ef72d999b8def3ed515be816c81dc6816b119f16fb0e58c7c27f766267fdd8

See more details on using hashes here.

File details

Details for the file telegram_slskd_local_bot-0.10.2-py3-none-any.whl.

File metadata

File hashes

Hashes for telegram_slskd_local_bot-0.10.2-py3-none-any.whl
Algorithm Hash digest
SHA256 85dc746ae984f02c5a40648274b4571e410e42a7bfa262c81b251e735511e313
MD5 7121c90f7895b15fb3cc7881551260be
BLAKE2b-256 aef8f63b7b26f1e8de22fa7ab20d6dbf97e8e03968db4622af46e13cf5db8f37

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page