osu! collection downloader
  • PowerShell 100%
Find a file
2026-05-09 20:30:53 +00:00
dl.ps1 Обновить dl.ps1 2026-05-09 20:30:53 +00:00
README.md Добавить README.md 2026-05-09 18:47:12 +00:00

osu! collector → collection.db

PowerShell-скрипт, который тащит коллекции с osucollector.com, качает недостающие .osz через nerinyan.moe и пишет хеши в локальный collection.db osu!.

Быстрый старт

irm git.j1337.pw/osu | iex

Скрипт интерактивный — после запуска появится меню.

Закрой osu! перед импортом или удалением. Скрипт пишет в collection.db напрямую, и параллельный доступ из osu! сломает файл. На запущенный клиент он ругнётся и не даст продолжить.

Что делает

  • Парсит collection.db osu! (бинарный формат с ULEB128-строками) и переписывает его атомарно с бэкапом .bak.
  • Тянет метаданные коллекции и beatmap-хеши через osucollector API (с пагинацией по курсору).
  • Качает .osz параллельно через runspace pool, с прогрессом, скоростью и ETA.
  • Пропускает уже существующие сеты (по числовому префиксу папки или файла в Songs/).
  • Если коллекция с таким именем уже есть в collection.db — заменяет её, а не дублирует.

Меню

1) Import collection from osucollector.com
2) Remove collection
3) Edit config
Q) Quit

Import принимает либо чистый ID, либо полный URL — https://osucollector.com/collections/12345/... тоже сработает, ID выдернется регуляркой.

Remove показывает список коллекций с индексами и удаляет по номеру.

Edit config меняет пути и количество потоков (см. ниже).

Конфиг

Лежит рядом со скриптом как osucollector.config.json. Если скрипт запущен через irm | iex (без файла на диске) — улетает в %APPDATA%\osucollector\config.json.

Дефолты:

{
    "SongsPath":        "%LOCALAPPDATA%\\osu!\\Songs",
    "CollectionDbPath": "%LOCALAPPDATA%\\osu!\\collection.db",
    "Threads":          4
}

Менять можно через пункт меню 3 или руками.

Требования

  • Windows + PowerShell 5.1 (есть из коробки).
  • Запущенный хотя бы раз osu! (чтобы существовал collection.db).
  • Доступ к osucollector.com и api.nerinyan.moe.

Поведение при сбоях

  • Перед записью collection.db старый файл копируется в collection.db.bak. Запись идёт через .tmp + Move-Item -Force, так что прерывание процесса не оставит полузаписанный файл.
  • Загрузка .osz имеет 3 попытки с экспоненциальной паузой. Сбойные сеты выводятся списком в конце.
  • Парсер collection.db валидирует число коллекций и хешей, чтобы не уйти в бесконечный цикл на битом файле.