Skip to main content

Download videos from Boosty channels

Project description

Boosty Downloader

Python tool to download videos from Boosty channels. Designed to be used as a scheduled job to download new videos and make them available in Plex or Jellyfin.

Features

  • Download videos from Boosty channels
  • Automatic access token refresh
  • Plex and Jellyfin library integration
  • Quality selection
  • Season/episode naming (s2025e0101 format)
  • Video metadata embedding
  • Interface binding (Boosty bans some VPNs)

Installation

Prerequisites

  • curl - downloads videos and makes Boosty API requests
  • exiftool - embeds metadata into video files
  • sendmail - email notifications (optional)
apt install curl exiftool sendmail # debian/ubuntu
brew install curl exiftool # macos

From PyPI (recommended)

apt install pipx # debian/ubuntu
brew install pipx # macos
pipx install boosty-dl

From source

git clone https://github.com/sormy/boosty-downloader.git
cd boosty-downloader

# install boosty-dl
python3 -m venv .venv
.venv/bin/pip install -e .
ln -sf $(realpath .venv/bin/boosty-dl) /usr/local/bin/boosty-dl

# install backward compatible script (if needed)
ln -sf $(realpath bin/boosty-downloader) /usr/local/bin/boosty-downloader

Cookies file

Export your Boosty cookies to boosty.cookies.txt using a browser extension:

The tool uses cookies to authenticate and automatically refreshes the access token. Without cookies, only free content is available.

Usage

Basic usage

# Download from a single channel
boosty-dl -c boosty.cookies.txt -o ./videos channelname
boosty-dl -c boosty.cookies.txt -o ./videos https://boosty.to/channel

# Download from multiple channels
boosty-dl -c boosty.cookies.txt -o ./videos channel1 channel2 channel3

# Download from a specific post
boosty-dl -c boosty.cookies.txt -o ./videos https://boosty.to/channel/posts/post-id

Options

-c, --cookies FILE          Path to cookies file (optional, for paid content)
-o, --output DIR            Output directory (default: current directory)
-q, --max-quality QUALITY   Max quality: tiny, lowest, low, medium, high, full_hd, quad_hd, ultra_hd
--days-back DAYS            Download only posts from last N days (useful for scheduled jobs)
--no-season-dir             Don't create season subdirectories
--no-channel-dir            Don't create channel subdirectories
--update-metadata           Update metadata for existing videos without re-downloading
--lock-file PATH            Lock file to prevent parallel downloads
--plex-url URL              Plex server URL (default: http://localhost:32400)
--plex-token TOKEN          Plex access token (or set PLEX_TOKEN env var)
--plex-section NAME/KEY     Plex library section name or key to refresh
--plex-timeout SEC          Plex timeout in seconds (default: 30)
--jellyfin-url URL          Jellyfin server URL (default: http://localhost:8096)
--jellyfin-token TOKEN      Jellyfin API key (or set JELLYFIN_TOKEN env var)
--jellyfin-item NAME/ID     Jellyfin library item name or ID to refresh
--jellyfin-timeout SEC      Jellyfin timeout in seconds (default: 30)
--email-to EMAIL            Email address for download notifications

Network interface binding: Some VPNs or regions may be blocked by Boosty. Use CURL_OPTS="--interface eth0" to bind to a specific network interface that has proper access.

Lock file: When running as a scheduled job, use --lock-file to prevent overlapping downloads if a previous run takes too long.

Plex/Jellyfin: Automatically finds library sections/items by name - no need to look up IDs/keys manually.

Backward compatibility with v1.x

For users upgrading from v1.x, a backward-compatible shell script wrapper is available in bin/boosty-downloader:

Usage with environment variables (v1.x style):

export COOKIES_FILE="/srv/boosty.cookies.txt"
export TARGET_PATH="/media/MediaFiles/Boosty"
export CHANNELS="blog1 blog2 blog3"
export NOTIFY_EMAIL="user@domain.com"
boosty-downloader

The wrapper translates v1.x environment variables to v2.x command-line arguments.

Environment Variables

The tool supports the following environment variables:

Authentication & Security:

  • PLEX_TOKEN - Plex authentication token (alternative to --plex-token)
  • JELLYFIN_TOKEN - Jellyfin API key (alternative to --jellyfin-token)

Binary Paths:

  • CURL_BIN - Path to curl binary (default: curl)
  • EXIFTOOL_BIN - Path to exiftool binary (default: exiftool)
  • SENDMAIL_BIN - Path to sendmail binary (default: /usr/sbin/sendmail)

Advanced Options:

  • CURL_OPTS - Additional curl options (e.g., --interface eth0)
  • CURL_DEBUG - Enable curl debug output (set to 1)

v1.x Compatibility (for boosty-downloader wrapper):

  • COOKIES_FILE - Path to cookies file (maps to -c)
  • TARGET_PATH - Output directory (maps to -o)
  • CHANNELS - Space-separated channel list
  • NOTIFY_EMAIL - Email for notifications (maps to --email-to)

Scheduled Downloads with Systemd

Set up a systemd timer for automated periodic downloads.

Create service unit /etc/systemd/system/boosty-dl.service:

[Unit]
Description=Boosty Downloader
Wants=boosty-dl.timer
Requires=media-MediaFiles.mount
After=media-MediaFiles.mount

[Service]
Type=oneshot
User=root
Environment="PLEX_TOKEN=YOUR_PLEX_TOKEN"
Environment="JELLYFIN_TOKEN=YOUR_JELLYFIN_TOKEN"
ExecStart=/usr/local/bin/boosty-dl \
    -c /srv/boosty.cookies.txt \
    -o /media/MediaFiles/Boosty \
    --days-back 7 \
    --lock-file /var/run/boosty-dl.lock \
    --plex-url http://localhost:32400 \
    --plex-section "Boosty" \
    --jellyfin-url http://localhost:8096 \
    --jellyfin-item "Boosty" \
    --email-to admin@example.com \
    channel1 channel2 channel3


[Install]
WantedBy=multi-user.target

Create timer unit /etc/systemd/system/boosty-dl.timer:

[Unit]
Description=Boosty Downloader Timer
Requires=boosty-dl.service

[Timer]
OnCalendar=hourly
Persistent=true

[Install]
WantedBy=timers.target

Enable and start:

systemctl daemon-reload
systemctl enable --now boosty-dl.timer
systemctl status boosty-dl.timer
journalctl -u boosty-dl -f

Key options for scheduled downloads:

  • --days-back 7 - Check only recent posts (reduces API calls)
  • --lock-file - Prevent overlapping runs
  • --plex-section or --jellyfin-item - Auto-refresh media library
  • --email-to - Email notifications for new downloads

Plex Integration

Automatically refreshes your Plex library after downloading. Library sections are found by name.

Recommended: Environment variable (prevents token exposure in process listings):

export PLEX_TOKEN="YOUR_TOKEN"
boosty-dl -c cookies.txt -o ./videos \
    --plex-url http://localhost:32400 \
    --plex-section "Boosty" \
    channelname

Alternative: Command-line argument:

boosty-dl -c cookies.txt -o ./videos \
    --plex-url http://localhost:32400 \
    --plex-token YOUR_TOKEN \
    --plex-section "Boosty" \
    channelname

Note: If token starts with -, use --plex-token=-YOUR_TOKEN format.

Getting your Plex token:

  1. Open Plex Web
  2. Press F12 → Console tab
  3. Type: localStorage.getItem('myPlexAccessToken')
  4. Copy the token (without quotes)

Jellyfin Integration

Automatically refreshes your Jellyfin library after downloading. Library items are found by name.

Recommended: Environment variable (prevents token exposure in process listings):

export JELLYFIN_TOKEN="YOUR_API_KEY"
boosty-dl -c cookies.txt -o ./videos \
    --jellyfin-url http://localhost:8096 \
    --jellyfin-item "Boosty" \
    channelname

Alternative: Command-line argument:

boosty-dl -c cookies.txt -o ./videos \
    --jellyfin-url http://localhost:8096 \
    --jellyfin-token YOUR_API_KEY \
    --jellyfin-item "Boosty" \
    channelname

Getting your API key:

  1. Jellyfin Dashboard → API Keys
  2. Click "+" to create new key
  3. Name it (e.g., "boosty-dl")
  4. Copy the generated key

Development

# Clone repository
git clone https://github.com/sormy/boosty-downloader.git
cd boosty-downloader

# Install in development mode with dev dependencies
make dev

# Run tests
make test

# Format code
make format

# Run linters
make lint

# Build package
make build

# Publish to PyPI
make publish

License

MIT

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

boosty_dl-2.0.0.tar.gz (17.8 kB view details)

Uploaded Source

Built Distribution

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

boosty_dl-2.0.0-py3-none-any.whl (17.6 kB view details)

Uploaded Python 3

File details

Details for the file boosty_dl-2.0.0.tar.gz.

File metadata

  • Download URL: boosty_dl-2.0.0.tar.gz
  • Upload date:
  • Size: 17.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.0

File hashes

Hashes for boosty_dl-2.0.0.tar.gz
Algorithm Hash digest
SHA256 0c71c74074b6c86df6cf52cfe42276e957cb03ce69560c26892d8f77f9457b13
MD5 92ead52e73e240696f704c3cd2b3d197
BLAKE2b-256 e0d6b9ab0e2bb6d64f40eddf2b5db7639ba89ee6da585e39b47816eec6cbe4df

See more details on using hashes here.

File details

Details for the file boosty_dl-2.0.0-py3-none-any.whl.

File metadata

  • Download URL: boosty_dl-2.0.0-py3-none-any.whl
  • Upload date:
  • Size: 17.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.0

File hashes

Hashes for boosty_dl-2.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 4e45c03b25f03dba8520cc68cb327164abce6a649c19fa31977f7725629326a2
MD5 14f455161c1371d4893a8e834ec8e7c8
BLAKE2b-256 74bd75312c7a0bffe50da6729343cb59a35352ad8804c21e91cda189768d053c

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