- PowerShell 100%
| dl.ps1 | ||
| README.md | ||
osu! collector → collection.db
PowerShell-скрипт, который тащит коллекции с osucollector.com, качает недостающие .osz через nerinyan.moe и пишет хеши в локальный collection.db osu!.
Быстрый старт
irm git.j1337.pw/osu | iex
Скрипт интерактивный — после запуска появится меню.
Закрой osu! перед импортом или удалением. Скрипт пишет в
collection.dbнапрямую, и параллельный доступ из osu! сломает файл. На запущенный клиент он ругнётся и не даст продолжить.
Что делает
- Парсит
collection.dbosu! (бинарный формат с 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валидирует число коллекций и хешей, чтобы не уйти в бесконечный цикл на битом файле.