Download videos from Boosty channels
Project description
Boosty Downloader (boosty-dl)
Boosty Downloader (boosty-dl) — the ultimate tool for mirroring Boosty channels into a local media library, fully compatible with Plex and 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 requestssendmail- email notifications (optional)
apt install curl sendmail # debian/ubuntu
brew install curl # 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:
- Chrome: https://chromewebstore.google.com/detail/get-cookiestxt-locally
- Firefox: https://addons.mozilla.org/en-US/firefox/addon/cookies-txt
Recommendation: Export cookies from an incognito/private browser tab. This creates a separate session with a unique client ID. This way, access token refreshes by boosty-dl won't interfere with your regular browser session, and token refreshes in your browser won't invalidate the boosty-dl cookies file.
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 Cookies file (optional, for paid content)
--force-access-token-refresh Force refresh of access token even if not expired
-o, --output DIR Output directory (default: current directory)
-q, --max-quality QUALITY Maximum quality: tiny, lowest, low, medium, high, full_hd, quad_hd, ultra_hd
--days-back DAYS Process last N days only
--update-metadata Update metadata for existing files without downloading
--no-season-dir Don't create season directories
--no-channel-dir Don't create channel directories
--lock-file PATH Lock file path
--plex-section NAME/KEY Plex library section name or key to refresh
--plex-url URL Plex server URL (default: http://localhost:32400)
--plex-token TOKEN Plex authentication token (or set PLEX_TOKEN env var)
--plex-timeout SEC Plex timeout in seconds (default: 30)
--jellyfin-item NAME/ID Jellyfin library item name or ID to refresh
--jellyfin-url URL Jellyfin server URL (default: http://localhost:8096)
--jellyfin-token TOKEN Jellyfin authentication token (or set JELLYFIN_TOKEN env var)
--jellyfin-timeout SEC Jellyfin timeout in seconds (default: 30)
--email-to EMAIL Email address to send download notifications to
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)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 to1)
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 listNOTIFY_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-sectionor--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:
- Open Plex Web
- Press F12 → Console tab
- Type:
localStorage.getItem('myPlexAccessToken') - 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:
- Jellyfin Dashboard → API Keys
- Click "+" to create new key
- Name it (e.g., "boosty-dl")
- 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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file boosty_dl-2.0.1.tar.gz.
File metadata
- Download URL: boosty_dl-2.0.1.tar.gz
- Upload date:
- Size: 18.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f7bd396050599fc39349f164118ef9921fe6d0df87ec10e225f40ceac2618b4a
|
|
| MD5 |
e3f6bfc4cfef491a1239354f92570104
|
|
| BLAKE2b-256 |
9c9475d3c6b377c0a71d97712a118ba0b1b082984f038096909504eb1d3293d2
|
File details
Details for the file boosty_dl-2.0.1-py3-none-any.whl.
File metadata
- Download URL: boosty_dl-2.0.1-py3-none-any.whl
- Upload date:
- Size: 18.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9746f5674c561590536280947e963b41a4466f44057abd6a144eddfa483e2cfb
|
|
| MD5 |
5c071179c66822d6cfcd261dfb929e83
|
|
| BLAKE2b-256 |
9f80fedad664c486af411cd181379964975f42229d4256c181d7d8747741df3d
|