osu!stable OSR → Beatmap 恢复工具 v4

本地解析 .osr 的 Beatmap MD5,并在线反查 Beatmap / Beatmapset 信息。文件内容不会上传;网络请求只发送 MD5。

单文件 · 无依赖
拖入 .osr 文件,或选择文件 / 文件夹 支持一次选择大量 replay;只读取每个文件开头用于解析 MD5。
OSR 文件0
有效 MD5(去重)0
已匹配 Beatmap0
唯一 Beatmapset0
未匹配 / 待重试0
等待选择文件。
高级:官方 osu! API 回退(可选)

默认使用无需登录的 hinai 公共查询接口。若镜像未找到某个 MD5,可粘贴一个已有的 osu! API v2 OAuth access token,工具会尝试官方 /beatmaps/lookup?checksum=...。不要在这里填写 client secret。

尚未建立下载队列
仅下载勾选项,按表格顺序对 Set ID 去重。同一 Set 的勾选状态同步。批内每首间隔 1 秒,本批结束后等待指定秒数再开始下一批;参数修改从下一批生效。取消勾选可跳过尚未发送的项目。浏览器可能会询问是否允许多个自动下载;请允许后继续。
结果
状态 OSR 文件 Beatmap MD5 Beatmap ID Set ID 歌曲 / 难度 Mapper Rank 状态 操作
暂无数据
原理与限制

.osr 解析:开头依次是 1 字节游戏模式、4 字节客户端版本,然后是 osu! 的 String 编码;第一个 String 就是 Beatmap MD5。工具只解析这一段,不需要解压 replay 的 LZMA 帧。

反查:默认把 MD5 分批发送到 hinai 的公开 beatmap 元数据接口;批量未命中的项再用单个 MD5 接口重试。若提供 OAuth access token,可再向 osu! 官方 API v2 查询。

隐私:.osr 文件名和文件内容均只留在浏览器本地;查询时会把 Beatmap MD5 发送给所选 API。浏览器的 file:// 页面是否允许跨域请求取决于 API 的 CORS 配置;若浏览器明确报 CORS/Failed to fetch,请用最新版 Chrome/Edge/Firefox,或改用本地 HTTP 服务器打开此 HTML。

排序:结果默认按 Beatmapset ID 从小到大排列;点击任意可排序表头可切换字段和升/降序。CSV、JSON 和 Set ID 导出以及批量下载队列均沿用当前表格顺序。

镜像下载:批量下载仅对勾选结果中的唯一 Set ID 去重后分批触发。“已启动下载”链接可用于手动重试。官方下载若被重定向,请在官网页面点击 Download。浏览器无法从跨域附件可靠判断每个文件是否最终保存成功,因此进度表示“已发送下载请求”,不是服务端确认成功。