osynic_serializer 是一款高效的osu!谱面序列化工具,基于osynic_osudb开发,支持FOLDER、OSUDB两种序列化算法。

推荐搭配osynic_downloader使用,可实现osu!谱面的快速序列化与多设备谱面同步。

✨ 特性
- 双模式序列化:支持直接序列化Songs目录或osu!.db文件
- 多输出格式:支持序列化为sets或songs两种json格式
- 高效迅速:速度极快,5000+谱面序列化完成仅需0.6s
- 差量过滤:支持差量过滤,对比序列化结果与已有json文件,仅输出本地缺失谱面
📦 安装
预编译版本
源码编译
🚀 快速开始
基本使用
# 直接序列化Songs文件夹到songs.json
# 直接序列化osu!.db文件到sets.json
# Diff序列化Songs文件夹,输出diffSets.json相较于本地多出来的谱面
# Diff序列化osu!.db文件,输出diffSongs.json相较于本地多出来的谱面
⚙️ 参数详解
| 参数 | 简写 | 默认值 | 说明 |
|---|---|---|---|
| --algorithm | -a | OSUDB | osu!谱面序列化算法 |
| --json-type | -t | songs | json输出格式 |
| --path | -p | osu!默认安装目录 | osu!安装目录(或者 包含 Songs文件夹 或 osu!.db 的文件夹) |
| --diff | -d | - | 差量过滤文件地址( 文件的 json-type 需要保持一致) |
| --output | -o | songs | json存储目录(自动创建) |
| --help | -h | - | 显示帮助信息 |
支持的序列化算法
- FOLDER:基于Songs文件夹序列化,从谱面文件夹名以及.osu文件中提取元数据,文件夹名不完整时可能存在不准确的情况
- OSUDB:基于osu!.db文件序列化,最准确的序列化方式
输出JSON示例
sets.json(sets模式):
songs.json(songs模式)(Osynic):
📌 注意事项
- osu!安装目录:请确保osu!安装目录下存在Songs文件夹或osu!.db文件,如果osu!安装目录不在默认位置,请使用
--path参数指定 - 差量过滤:差量过滤功能需要提供一个已有的json文件,用于对比序列化结果,仅输出本地缺失的谱面
🆗 作为库来使用
首先在你的Cargo.toml中添加依赖:
[]
= {="0.1.0", = false, = ["cli"]}
最上层的方法都已位于osynic_serializer::commands模块中,所需类型均位于osynic_serializer::types模块中,而osynic_serializer::functions模块则是略底层的函数。
// 传入osu_dir,序列化Songs文件夹,得到Vec<SongWithMapper>
use serialize_by_folder;
// 传入osu_dir,序列化osu!.db文件,得到Vec<SongWithMapper>
use serialize_by_osudb;
// 对比新的Beatmapsets和已有的Beatmapsets,得到差量后的Beatmapsets
use diff_sets;
// 对比新的SongsWithMapper和已有的SongsWithMapper,得到差量后的SongsWithMapper
use diff_songs;
此外, osynic_osudb 也已经重导出,可以直接通过本库引用:
use *;
🤝 贡献指南
这个库是差不多一个下午写完的,所以肯定还有很多地方需要改进,只是简单的把osynic_core里面的序列化功能拎出来了,很多地方还很生硬,但我暂时也懒得改了,更待良辰吉日改之
所以,如果代码有任何问题,或者你有任何建议,欢迎提交PR或者Issue,我会尽快处理~
如果你想贡献代码,请遵循以下规则:
- 遵循Rust官方编码规范
- 新增功能需附带测试用例
- 提交前运行
cargo fmt和cargo clippy
📜 开源协议
本项目基于 MIT License 开源,请尊重原作者的著作权。使用osu!相关资源时请遵守osu!社区准则。