一个面向 osu! 的谱面批量下载器,通过 Sayobot 镜像提供的 osu! API 获取谱面信息并下载 .osz,支持按日期区间、玩家 bp、mapper 三种方式收集谱面。
- 单文件绿色程序,无需安装
- 支持并发下载、断点续传、暂停/继续、失败重试与下载前查重
- 当前版本:0.1.0.0
- 平台:Windows 10 / 11(使用系统自带的 .NET Framework 4.x)
- 本项目与 osu! 官方无关,谱面数据由 Sayobot 镜像站 提供
| 模式 | 输入 | 说明 |
|---|---|---|
| 按日期下载 | 起始日期、结束日期、谱面状态 | 下载日期区间(含结束日当天)内 Ranked / Qualified / Loved 的谱面 |
| 下载玩家 bp | 玩家名或 uid、bp 数量 | 下载该玩家最佳成绩对应的全部谱面(接口上限 100 条,不按状态过滤) |
| 下载 mapper 谱面 | mapper 用户名 | 下载该 mapper 制作的全部谱面(不按状态过滤) |
- 并发下载:1–8 路并发,可配置失败重试次数与超时
- 断点续传:中断后保留
.part文件,下次自动从已下载位置继续 - 暂停 / 继续 / 停止:下载过程中可随时暂停或停止,暂停不丢进度
- 失败重试:失败任务自动进入失败清单,可手动重试选中或全部
- 下载前查重:扫描输出目录中已有的
.osz、已解压的谱面文件夹,以及非标准命名文件夹里的.osu(读取BeatmapSetID),已存在的谱面自动跳过 - 失败清单:跨重启保留,支持重试、导出 CSV、移除、清空
- 任务统计:已完成 / 未完成 / 跳过 / 失败 / 取消 / 总数,进度条实时显示百分比
- 运行日志:页签内查看每一步的收集与下载日志
- 自动检测谱面目录:优先 osu! stable,找不到时尝试 osu!lazer;也可手动选择任意输出目录
- 配置持久化:下载模式、游戏模式、线路、并发、重试、超时、状态勾选、输出目录等
- 下载历史与失败清单:跨会话保留,可在设置中一键重置
- 手动检查更新:设置里点击“检查更新”,有新版本时可直接更新并自动重启
- 单实例:避免两个窗口同时写同一个下载目录
- 高 DPI 感知:缩放比例较高的显示器上界面不再模糊
- Windows 10 / 11(系统自带 .NET Framework 4.x,无需另装运行库)
- 能访问
api.sayobot.cn与txy1.sayobot.cn
- 在仓库的 Releases 页面下载最新的单文件 exe;
- 双击运行,无需安装;
- 首次启动会自动探测 osu! Songs 目录,也可以点“浏览”选择任意文件夹;
- 选择下载模式与参数,点击“开始”。
建议把输出目录设为 osu! 的
Songs文件夹,下载完成后 osu! 会自动识别并导入谱面。
| 参数 | 说明 |
|---|---|
| 下载模式 | ① 按日期 ② 玩家 bp ③ mapper 谱面 |
| 下载类型 | 完整版(带视频)/ 无视频 / mini |
| 下载线路 | 自动 / 中国移动 / 中国电信 / 中国联通 |
| 游戏模式 | osu! / 太鼓 / 接水果 / mania |
| 谱面状态 | Ranked / Qualified / Loved,仅“按日期下载”时显示并生效 |
| 起始 / 结束日期 | 仅“按日期下载”时显示,结束日期包含当天 |
| 玩家 / mapper | 仅模式 ②③ 显示 |
| BP 数量 | 仅模式 ② 显示,范围 1–100 |
| 输出目录 | 下载保存位置,可浏览选择 |
- 自动检测:重新探测 osu! 谱面目录;
- 开始:按当前参数开始收集与下载;
- 暂停 / 继续:暂停或恢复下载;
- 停止:取消当前批次。
- 任务列表:每个谱面的 SID、标题、文件名、状态、进度、大小、速度;
- 失败清单:失败任务列表,可重试选中/全部、导出 CSV、移除、清空、刷新;
- 运行日志:收集与下载过程的实时日志。
- 并发数(1–8)、失败重试次数(0–10)、超时(10–600 秒);
- 清空下载历史与失败清单(不会删除已下载的谱面文件);
- 检查更新:手动查询是否有新版本,有更新时可一键下载替换并重启。
- 下载的谱面命名为
{setid} {artist - title}.osz(自动清理 Windows 非法字符并限制长度); - 未下载完的文件以
{setid}.osz.part保存,用于断点续传; - 程序数据保存在
%APPDATA%\osu!MapsDownloader:records.txt:已下载记录;failed.txt:失败清单;config.ini:用户配置。
- 删除程序目录不会影响已下载的谱面;需要重置历史时使用设置中的“清空下载历史与失败清单”。
MainForm(界面与流程编排)
├─ TaskCollector(收集谱面) ── SayobotApi(镜像 API)
├─ Downloader(并发下载/续传/查重/落盘) ── AppStore(记录与失败清单)
├─ AppStore(文本持久化)
└─ UpdateChecker / UpdateApplier(手动检查更新)
| 文件 | 职责 |
|---|---|
Program.cs |
程序入口与单实例检查 |
MainForm.cs |
主窗口布局与交互、批次流程编排、统计与自绘进度条 |
Downloader.cs |
下载引擎:任务模型、工作线程、断点续传、完整性校验、失败重试、下载前查重扫描 |
TaskCollector.cs |
三种模式的谱面收集:日期分页与切片、bp 反查、mapper 全量收集与去重 |
SayobotApi.cs |
Sayobot API 客户端与数据模型(谱面、玩家成绩) |
AppStore.cs |
本地持久化:下载记录、失败清单、用户配置 |
UpdateChecker.cs |
检查更新:查询 GitHub Release、版本比较、下载并校验更新包 |
UpdateApplier.cs |
更新落地:替换程序并自动重启 |
AssemblyInfo.cs |
程序集版本信息 |
app.manifest |
Windows 清单(DPI 感知、普通权限启动) |
- 收集:
TaskCollector按模式向SayobotApi请求谱面,得到去重后的谱面集列表; - 查重:
Downloader扫描输出目录并读取历史记录,过滤掉已存在的谱面; - 下载:工作线程解析下载地址、按需续传、流式写入
.part,校验大小后改名为.osz; - 记录:成功写入下载记录并清除同名失败项;失败写入失败清单;
- 展示:任务状态与日志通过回调回到界面线程更新。
- 玩家 bp 最多 100 条(镜像接口限制);
- 模式 ②③ 会下载全部相关谱面,不按 Ranked / Qualified / Loved 过滤;
- 依赖 Sayobot 镜像的可用性,离线状态下无法收集或下载;
- 下载记录以文件路径校验,手动改名或移动谱面后由目录扫描兜底识别;
- 仅支持 Windows。
- Sayobot 镜像站(osu.sayobot.cn)及其开发者 夜妈妈:提供谱面数据与下载镜像;
- 制作:osuID Michibata
本工具仅用于个人下载与整理谱面,请遵守 osu! 与镜像站的使用条款;项目不提供任何谱面内容。