#serialization #diff #tui #osynic #json-diff #osudb

bin+lib osynic_serializer

A osu beatmapsets serializer lib & TUI application based on osynic_osudb

2 releases

Uses new Rust 2024

new 0.1.1 Mar 13, 2025
0.1.0 Mar 12, 2025

#55 in Games

46 downloads per month

MIT license

55KB
1K SLoC

Logo逃走啦~

OsynicSerializer 🎵

Rust编写的osu!谱面序列化工具,基于osynic_osudb开发


中文版本 | English Version

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

osynic_serializer.gif

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

osynic_downloader.gif

✨ 特性

  • 双模式序列化:支持直接序列化Songs目录或osu!.db文件
  • 多输出格式:支持序列化为sets或songs两种json格式
  • 高效迅速:速度极快,5000+谱面序列化完成仅需0.6s
  • 差量过滤:支持差量过滤,对比序列化结果与已有json文件,仅输出本地缺失谱面

📦 安装

预编译版本

cargo install osynic_serializer

源码编译

git clone https://github.com/osynicite/osynic_serializer
cd osynic_serializer
cargo build --release

🚀 快速开始

基本使用

# 直接序列化Songs文件夹到songs.json
osynic-sl -t songs -o ./songs

# 直接序列化osu!.db文件到sets.json
osynic-sl -t sets -p D:\\ProgramUnsigned\\Games\\OSU -o ./songs

# Diff序列化Songs文件夹,输出diffSets.json相较于本地多出来的谱面
osynic-sl -t sets -d json/diffSets.json -o ./songs

# Diff序列化osu!.db文件,输出diffSongs.json相较于本地多出来的谱面
osynic-sl -t songs -p D:\\ProgramUnsigned\\Games\\OSU -d json/diffSongs.json -o ./songs

⚙️ 参数详解

参数 简写 默认值 说明
--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 - 显示帮助信息

支持的序列化算法

  1. FOLDER:基于Songs文件夹序列化,从谱面文件夹名以及.osu文件中提取元数据,文件夹名不完整时可能存在不准确的情况
  2. OSUDB:基于osu!.db文件序列化,最准确的序列化方式

输出JSON示例

sets.json(sets模式):

{
    "beatmapset_ids": ["114514", "1919810", "1538879"]
}

songs.json(songs模式)(Osynic):

[
  {
    "song_id": 1985060,
    "artist_name": "ヒトリエ",
    "mapper_name": "flake",
    "song_name": "日常と地球の額縁 (wowaka x 初音ミク Edit)",
    "no_video": false
  },
    {
    "song_id": 1997071,
    "artist_name": "ナブナ",
    "mapper_name": "Ryuusei Aika",
    "song_name": "始発とカフカ",
    "no_video": false
  }
]

📌 注意事项

  1. osu!安装目录:请确保osu!安装目录下存在Songs文件夹或osu!.db文件,如果osu!安装目录不在默认位置,请使用--path参数指定
  2. 差量过滤:差量过滤功能需要提供一个已有的json文件,用于对比序列化结果,仅输出本地缺失的谱面

🆗 作为库来使用

首先在你的Cargo.toml中添加依赖:

[dependencies]
osynic_serializer = {version="0.1.0",default-features = false, features = ["cli"]}

最上层的方法都已位于osynic_serializer::commands模块中,所需类型均位于osynic_serializer::types模块中,而osynic_serializer::functions模块则是略底层的函数。

// 传入osu_dir,序列化Songs文件夹,得到Vec<SongWithMapper>
use osynic_serializer::commands::serialize_by_folder;
// 传入osu_dir,序列化osu!.db文件,得到Vec<SongWithMapper>
use osynic_serializer::commands::serialize_by_osudb;
// 对比新的Beatmapsets和已有的Beatmapsets,得到差量后的Beatmapsets
use osynic_serializer::commands::diff_sets;
// 对比新的SongsWithMapper和已有的SongsWithMapper,得到差量后的SongsWithMapper
use osynic_serializer::commands::diff_songs;

此外, osynic_osudb 也已经重导出,可以直接通过本库引用:

use osynic_serializer::osynic_osudb::*;

🤝 贡献指南

这个库是差不多一个下午写完的,所以肯定还有很多地方需要改进,只是简单的把osynic_core里面的序列化功能拎出来了,很多地方还很生硬,但我暂时也懒得改了,更待良辰吉日改之

所以,如果代码有任何问题,或者你有任何建议,欢迎提交PR或者Issue,我会尽快处理~

如果你想贡献代码,请遵循以下规则:

  • 遵循Rust官方编码规范
  • 新增功能需附带测试用例
  • 提交前运行cargo fmtcargo clippy

📜 开源协议

本项目基于 MIT License 开源,请尊重原作者的著作权。使用osu!相关资源时请遵守osu!社区准则

Dependencies

~2.4–4MB
~80K SLoC