⚡ Script to download your favorite author content (videos, files, posts) and sync them if needed.
  • Python 98%
  • HTML 1.3%
  • Shell 0.7%
Find a file
renovate[bot] 20faefb46d
chore(deps): update dependency ruff to v0.16.10 (#226)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-10-12 01:03:43 +00:00
.github ci: prefix the test matrix jobs with Test matrix (#214) 2026-09-23 17:27:37 -07:00
assets Major 2.0.0 Update (Better UX / Error Handling / HTML Generation) (#58) 2025-08-10 18:43:48 +03:00
boosty_downloader feat: persist post records as versioned JSON (#227) 2026-10-11 13:54:40 -07:00
docs refactor(api): read blog metadata and capture its schema (#220) 2026-10-04 04:48:27 -07:00
scripts feat(application): reconcile stored posts and plan missing downloads (#222) 2026-10-07 01:25:31 -07:00
test feat: persist post records as versioned JSON (#227) 2026-10-11 13:54:40 -07:00
tools chore: release v3.1.0 (#123) 2026-08-09 06:57:15 -07:00
.editorconfig Enhance CI flow - simplify & automate (#99) 2026-04-12 13:00:22 +03:00
.env.example chore: release v3.1.0 (#123) 2026-08-09 06:57:15 -07:00
.gitignore ci: warn about new API fields in the weekly report, alarm only on breaking changes (#210) 2026-09-23 13:40:08 -07:00
.python-version [build] Migrate from Poetry to uv (#127) 2026-08-09 08:55:45 -07:00
CHANGELOG.md feat(application): reconcile stored posts and plan missing downloads (#222) 2026-10-07 01:25:31 -07:00
CONTRIBUTING.md docs: use conventional commit titles with the area as scope (#206) 2026-09-22 14:57:16 -07:00
LICENSE Add MIT License file (#45) 2025-07-27 08:12:21 +03:00
pyproject.toml test: check test data against the API schema instead of golden files (#209) 2026-09-23 09:50:18 -07:00
pyrightconfig.json feat(application): define library storage contracts (#224) 2026-10-08 05:41:25 -07:00
README.md [downloader] Skip a post with a gone external video without retries (#197) 2026-09-21 04:43:28 -07:00
ruff.toml [debug-log] Log request outcomes, connection phases and retry attempts (#144) 2026-08-15 09:06:25 -07:00
Taskfile.yml refactor(api): read blog metadata and capture its schema (#220) 2026-10-04 04:48:27 -07:00
uv.lock chore(deps): update dependency ruff to v0.16.10 (#226) 2026-10-12 01:03:43 +00:00

🖥️ About

Welcome to the Boosty Downloader project!

This CLI tool allows you to download most of the content from Boosty.to in bulk. The post content itself is saved in html with a little bit of styling.

You can download:

  • Boosty Videos
  • External Videos (YouTube, Vimeo)
  • Files
  • Full Post content (including photos and links)

📑 Table of Contents

✨ Features

  • 📦 Bulk download: Download all available content from your favorite creator.
  • 🔎 Blog overview: check shows what each subscription tier gives (posts and share of the blog), where you stand, what the rest costs, media counts and the posting date range.
  • 🧪 Dry run: download --dry-run previews a run before you start it: new and updated posts, media to fetch by type and the known download size.
  • 📈 Run statistics: every download ends with what it did: posts, media by type, total size and time.
  • 📂 Content type filters: Download only the content you need (videos, images, etc) with --content-type-filter.
  • 📄 Download specific posts: Download post by url and username.
  • 🔃 Sync content seamlessly: The utility keeps cache of already downloaded posts, so you can resume your download at any time or get new content after a while.
  • 📼 Choose your video quality: You can choose preferred video quality to download (for boosty videos)
  • 🎨 Beauty posts preview: You can see posts content with rendered offline html files with dark/light theme changing.
  • 📊 Order matters: Posts have dates in names, so you can just sort it by name in your file explorer and see them in the correct chronological order.
  • 🆙 App update checker: If new updates are available, you'll be notified when you use the application next time.
  • 🔑 Auth helper script: Run boosty-downloader show-auth-script to get a browser console script that extracts your credentials automatically.

📸 Screenshots & Usage

🛠️ Installation

  1. Install python:

    • Window:
      winget install Python.Python.3.13
      
    • Linux:
      sudo apt-get install python3
      
    • macOS:
      brew install python
      
  2. Install the boosty-downloader package:

    pip install boosty-downloader
    
  3. Run the application:

    boosty-downloader --help
    

🚀 Configuration for Usage

Option 1 - Manually

  1. Open the Boosty website.
  2. Click the "Sign in" button and fill you credentials.
  3. Navigate to any author you have access to and scroll post a little.
  4. Copy auth token and cookie from browser network tab.

Option 2 - With helper script

  1. Run boosty-downloader show-auth-script to show the helper script (it will be copied to your clipboard automatically).
  2. Open the Boosty website and log in.
  3. Open browser console (F12) and paste the script.
  4. Scroll the page a little - a floating box with your credentials will appear.

This config will be created during first run of the app in the current working directory.

Step 3: Run the utility

Now you can just download your content with the following command:

boosty-downloader download YOUR_CREATOR_NAME

🛡️ When downloads fail

One bad link never costs you the whole run:

  • A failed download is retried up to 5 times with growing pauses; a link that expired mid-way is refreshed from the API once.
  • A post with one dead link keeps everything else: the parts that finished are remembered right away, and only the failed part is fetched again.
  • post.html is written anyway: a picture, video or audio track that did not download leaves a note at its place with the reason, so the post stays readable. The note goes away once a retry or a later run brings the piece.
  • A post that still fails is skipped, and the run continues.
  • A YouTube or Vimeo video that is gone (deleted, private, blocked) is not retried at all: the post is skipped right away with the site's reason, the rest of it is saved, and the run goes on.
  • Every skipped post is written to failed_downloads.log next to your downloads.
  • At the end, a summary lists everything that was skipped and why.
  • If 5 posts in a row fail, the downloader stops early: a streak like this means the problem is not in the posts - check your disk, folder permissions, or network.
  • Prefer to finish the pass no matter what? Add --skip-all-failures - the run never stops on a failure streak.
  • download --post-url gets the same retries and the same refresh as the full run.

Downloaded posts are cached. After you fix the cause, run the same command again - finished posts are skipped in seconds, and the download continues where it stopped.

Can't tell what's breaking? Re-run with --debug: it writes boosty-downloader-debug.log with every request and full error details, safe to attach to a GitHub issue - download links are logged without their signed keys.

💖 Contributing

If you want to contribute to this project, please see the CONTRIBUTING.md.

📜 License

This project is licensed under the MIT License - see the LICENSE file for details.