Skip to content

Repository files navigation

Booster — быстрый загрузчик контента с Boosty.to

Go Release License Downloads Platforms

Booster (Boosty Downloader) — это высокопроизводительный многопоточный парсер и инструмент для резервного копирования (бэкапа) контента с платформы Boosty.to. Позволяет массово скачивать видео, картинки, аудио, файлы и тексты постов на ваш компьютер.

Проект написан на Go (Golang) для максимальной скорости скачивания, экономного расходования оперативной памяти и портативности. Он работает «из коробки» (zero-dependencies) на Windows, Linux и macOS.

🚀 Ключевые возможности (Особенности)

  • Умная синхронизация (Бэкап): Инкрементальное обновление. При повторном запуске скачиваются только новые посты. Проверка занимает секунды.
  • Докачка файлов (Resume): Если скачивание прервалось или пропал интернет, незавершенные файлы (.part + Range) будут докачаны с места обрыва.
  • Тексты в Markdown: Текстовые блоки постов парсятся из внутреннего формата Boosty (Draft.js) и сохраняются в читабельный .md со всеми заголовками, ссылками и жирным шрифтом.
  • Многопоточность: Умный пул из 5 воркеров максимально нагружает ваш интернет-канал, скачивая медиафайлы параллельно.
  • Автоматический выбор качества: Для видео автоматически выбирается наилучшее доступное разрешение (Ultra HD / 1080p).
  • Надежность: Автоматические повторные попытки загрузки при ошибках сети и корректное завершение работы (Graceful shutdown) по Ctrl+C.
  • Простая авторизация: Получение токена сессии в один клик через JS-скрипт без долгого поиска куки в инструментах разработчика.

Сборка

В проекте есть готовые скрипты:

  • build-win.bat — быстрая сборка booster.exe.
  • build-releases.bat — массовая сборка релизов под все платформы (Windows, Linux, macOS) и архитектуры (amd64, arm64, x86). Все готовые бинарники складываются в отдельную папку builds/.

Или вручную:

go build -trimpath -ldflags="-s -w -buildid=" -o booster.exe ./cmd/booster

Запуск

Имя исполняемого файла зависит от вашей ОС и того, какой релиз вы скачали. В примерах ниже используется ./booster.

# Базовый запуск (программа спросит ник в интерактивном режиме)
./booster

# Запуск с указанием автора (ник или ссылка)
./booster -a nickname            # или -a https://boosty.to/nickname

# Указание папки для сохранения
./booster -a nickname -o /path/to/downloads

# Плоский режим (все файлы в одну папку без подпапок по постам)
./booster -a nickname -f

# Число параллельных загрузок (по умолчанию 5, максимум 64)
./booster -a nickname -w 12

# Не скачивать фото из внешних галерей, на которые ссылаются посты
./booster -a nickname --no-galleries

# Запуск из скрипта: не ждать Enter в конце
./booster -a nickname --no-wait

Коды возврата

Пригодятся, если запускаете из скрипта или планировщика:

Код Значение
0 всё скачано без ошибок
1 критическая ошибка (нет доступа к API, автор не найден)
2 часть файлов не скачалась — см. failed.txt
130 прервано пользователем (Ctrl+C)

При ошибках отметка синхронизации не обновляется, поэтому следующий запуск повторно обойдёт те же посты и докачает недостающее.

Внешние галереи

Некоторые авторы выкладывают полные съёмки во внешнюю галерею (платформа wfolio) и дают ссылку в посте — в самом посте лежат только уменьшенные превью. Booster распознаёт такие ссылки и забирает галерею целиком одним архивом, распаковывая её в подпапку gallery_<имя>/ рядом с постом:

2026-07-26_Lina_b7ca72a2/
  content.md
  001_3ace45fb.jpg          ← превью из поста
  gallery_lina-mc96q3/
    Photos/DSCF7288.jpg     ← оригиналы, 1,5 МБ вместо 400 КБ

Готовые галереи помечаются файлом .complete и при следующих запусках пропускаются, не создавая ни одного обращения к сайту. Запросы к сайту автора намеренно разрежены во времени, а при отказах загрузка галерей отключается до конца запуска — иначе сервер банит по IP.

Отключить: --no-galleries. Учтите, что галереи бывают объёмными: у автора с полусотней съёмок это десяток гигабайт поверх самого Boosty.

Если галерея платная (wfolio умеет продавать фото), Booster сообщит об этом и пропустит её — обхода оплаты нет.

Внешние видео

Ролики с YouTube и Vimeo скачать нельзя — Boosty хранит только ссылку на них. Такие ссылки сохраняются в external_links.txt рядом с постами, чтобы контент не потерялся. Скачать их можно через yt-dlp:

cut -f3 external_links.txt | yt-dlp -a -

Note

Для пользователей Linux: После скачивания бинарного файла необходимо сделать его исполняемым:

chmod +x booster-linux-amd64

Warning

Для пользователей macOS: При первом запуске скачанного бинарника macOS заблокирует его (Gatekeeper), так как он не подписан сертификатом Apple. Чтобы разрешить запуск, выполните в терминале (подставьте ваше имя файла):

xattr -rd com.apple.quarantine booster-macos-arm64
chmod +x booster-macos-arm64

Альтернативный способ: Правый клик по файлу в Finder → Открыть (Open) → в появившемся предупреждении нажать Открыть (Open Anyway).

Повторный запуск (докачка и обновление)

Программа идеально подходит для регулярной синхронизации (например, через планировщик):

  • Умный пропуск: Полностью скачанные файлы автоматически пропускаются без лишних сетевых запросов.
  • Докачка (Resume): Если скачивание прервалось (закрытие программы, обрыв сети), незавершенные файлы (.part) будут докачаны с места обрыва.
  • Синхронизация: При новых запусках скачиваются только новые посты и медиафайлы, опубликованные с момента последней проверки.

Авторизация

Токен ищется в переменной окружения BOOSTY_TOKEN, затем в файле .boosty_token рядом с бинарником, затем в ~/.boosty_token. Если токена нет или он просрочен — программа пытается скопировать в буфер обмена JS-скрипт для получения токена из консоли браузера и просит вставить результат.

Ручное получение токена

Если скрипт автоматически не скопировался в буфер обмена:

  1. Зайдите на сайт boosty.to под своим аккаунтом.
  2. Откройте панель разработчика (обычно F12 или Ctrl+Shift+I) и перейдите на вкладку Console (Консоль).
  3. Скопируйте и вставьте следующий JS-код, затем нажмите Enter:
    (function(){function getDecodedCookie(cookieName){const cookies=document.cookie.split(';');r={'%22':'"','%3A':':','%2C':',','%7B':'{','%7D':'}'};for(let c of cookies){const [n,v]=c.trim().split('=');if(n===cookieName&&v){let d=v;Object.entries(r).forEach(([e,dec])=>d=d.replaceAll(e,dec));return d}}return null}if(window.location.hostname==='boosty.to'){const authCookie=getDecodedCookie("auth");if(authCookie){const authObj=JSON.parse(authCookie),token={authorization:authObj.accessToken,expires_in:authObj.expiresAt,full_cookie:document.cookie};console.log("\nJust copy this text:\n\n"+btoa(JSON.stringify(token))+"\n")}else console.warn("Authorization data could not be found. Are you sure you are logged in?")}else console.warn("There is",window.location.hostname,", not boosty.to =)")})();
  4. Скопируйте появившуюся строку (выглядит как длинная base64 последовательность) и вставьте её в программу.

Идея и оригинальный JS-скрипт авторизации позаимствованы из отличного проекта lowfc/boosty_downloader.

Структура

  • main.go — CLI, сигналы, точка входа
  • auth.go — токен: decode/encode, load/save, буфер обмена
  • client.go — HTTP-клиент API boosty.to, пагинация, парсинг постов/медиа
  • models.go — модели данных (Post, MediaItem)
  • text.go — рендер текстовых блоков поста из формата Draft.js в удобный Markdown
  • tasks.go — построение задач загрузки из поста
  • download.go — воркеры, докачка, retry
  • stats.go — статистика загрузки
  • progress.go / log.go — однострочный индикатор прогресса и логирование
  • run.go — основной цикл (аналог run() в Python)
  • util.go — safeFilename, signURL, extractNickname, safeUnlink/Replace

About

Booster — быстрый загрузчик контента с Boosty.to

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages