osu本地数据服务
打开首页自动下载最新版,设置页可切换已下载版本。
| 页面 | 路径 | 说明 |
|---|---|---|
| 状态 | / |
各模块可用性 |
| 设置 | /settings |
图形化配置管理 |
| 管理 | /management |
后台任务与日志 |
页面 /management,左侧配置任务、右侧实时日志(SignalR 推送),同一时间只运行一个任务。
枚举 stable(osu!.db)与 Lazer(client.realm)中的 Mania 谱面,计算各算法 SR,保存到 mania_sr.msgpack。
| 算法 | 来源 |
|---|---|
| PPY | 只能从 osu!.db 的 ManiaStarRating 读取(无法调用 stable 本身计算),且只在首次导入时读库,之后以 msgpack 为准 |
| XXY | 本地用 StarRatingRebirth 计算 |
| SPM | 本地用 SPMRating 计算,仅支持 4K / 6K / 7K |
- 每个算法槽位带状态:未计算(下次补算)、有值、失败、不适用。失败与不适用是终态,不会反复重试;勾选「重算失败项」可手动重试。
osu!.db里的 NM / HT / DT 三槽不管被写成 XXY 还是 SPM,都不影响后续生成,因为只有 PPY 首次导入会读库。库被本工具以外的东西改动时,用「重新导入 PPY」刷新。- 参数:并行数、计算 XXY / 计算 SPM、记录错误、阶段写入(每 5000 条落盘)。
- 支持断点续跑,已有值的槽位直接跳过。
把 msgpack 中的结果写回本地数据库,可选 PPY / XXY / SPM:
| 目标 | 位置 | 写入字段 |
|---|---|---|
| Stable | osu!.db |
ManiaStarRating 的 NM / HT / DT 三槽 |
| Lazer | client.realm |
BeatmapInfo.StarRating(仅 NM,只影响过滤与排序) |
只写该算法有值的谱面;未计算 / 失败 / 不适用的谱面保持库中原值,不会退回其它算法,因此不会出现一个库里混着多种算法的 SR。写入完成后页面会显示库中当前算法、写入时间与条数。
SPM 的 4K / 6K 输出是模型自身的等级值,不是星级,只有 7K 是星级量纲。选择 SPM 写入时会弹窗确认,写入后 4K / 6K 谱面在游戏内显示的不再是星数。
筛选 XXY - PPY < 阈值 且 PPY > 下限 的谱面,在 Stable(collection.db)或 Lazer(client.realm)中创建 PP / PP HT / PP DT 三个收藏夹。XXY 与 PPY 必须都已算出,否则跳过。
mania_sr.msgpack(默认位于 %LOCALAPPDATA%\OsuLocalServer)为紧凑二进制格式:每条记录是 [状态位, PPY, XXY, SPM],其中的 SR 是 [NM, HT, DT],不写字段名。旧格式在首次加载时自动迁移,原文件备份为 .bakN。同一文件通过 /api/management/mania-sr/msgpack 下发给前端。
| 路径 | 说明 |
|---|---|
/api/status |
各模块可用性 |
/api/stable/files/{**relativePath} |
从 osu!stable 目录读取文件,支持 * 通配符 |
/api/stable/folder/{**folderPath} |
列出 stable 目录下指定文件夹内的所有文件名、大小和修改时间 |
/api/lazer/scores?rql=...&depth=N |
RQL 查询 Score |
/api/lazer/beatmaps?rql=...&depth=N |
RQL 查询 Beatmap |
/api/lazer/beatmapsets?rql=...&depth=N |
RQL 查询 BeatmapSet |
/api/lazer/collections?rql=...&depth=N |
RQL 查询 Collection |
/api/lazer/files/{hash} |
按 hash 获取文件 |
/api/osuapi/v2/** |
反向代理到 osu.ppy.sh |
/api/management/mania-sr/msgpack |
返回 mania_sr.msgpack 文件 |
查询参数说明:
depth— 递归展开层数,默认0(仅顶层),1展开直接属性,2展开嵌套属性,以此类推。
noExpand— 跳过指定字段的递归展开,可重复使用(&noExpand=FieldA&noExpand=FieldB),用于控制返回数据大小,避免对象图循环膨胀。
更新 stable 收藏夹。overwrite 为 true 时覆盖(替换整个收藏夹),为 false(默认)时追加去重。
{ "name": "...", "beatmapMd5Hashes": ["...", "..."], "overwrite": false }批量写入 Mania Star Rating(NM/HT/DT)到 stable 的 osu!.db。
{ "starRatings": { "<md5>": { "nm": 6.53, "ht": 5.21, "dt": 7.82 } } }更新 lazer 收藏夹。overwrite 为 true 时覆盖(替换整个收藏夹),为 false(默认)时追加去重。
{ "name": "...", "beatmapMd5Hashes": ["...", "..."], "overwrite": false }计算谱面 Star Rating,body 为原始 .osu 文件内容,mods 通过查询参数传递(JSON 数组,需 URL 编码)。
POST /api/lazer/star-rating/calculate?mods=[{"acronym":"DT","settings":{"speed_change":1.5}},{"acronym":"HR"}]
Content-Type: text/plain
osu file format v14...批量写入 Star Rating 到 lazer 的 client.realm。
{ "starRatings": { "<md5>": 6.53, "<md5>": 4.21 } }使用 StarRatingRebirth 计算 XXY SR。body 为原始 .osu 文件内容,speedRate 通过查询参数传递。
POST /api/tools/xxy-calculate?speedRate=1.5
Content-Type: text/plain
osu file format v14...