Skip to content

Ovler-Young/DizzySync

Repository files navigation

DizzySync - Dizzylab自动同步器

一个用Rust编写的Dizzylab音乐自动同步工具,可以自动下载你购买的所有专辑。

特性

  • 🎵 自动同步所有已购买的专辑
  • 🎛️ 支持多种音质格式(128kbps/320kbps MP3/FLAC/特典)
  • ⚡ 单线程下载,避免给服务器造成压力
  • 🔧 基于TOML的简单配置
  • 🖥️ 命令行界面(未来将支持GUI)

安装

从源码编译

  1. 确保安装了Rust (1.70+)
  2. 克隆仓库并编译:
git clone https://github.com/Ovler-Young/dizzysync.git
cd dizzysync
cargo build --release

编译完成后,可执行文件位于 target/release/dizzysync

使用方法

1. 创建配置文件

./dizzysync --init

这会创建一个默认的 config.toml 配置文件。

2. 配置Cookie

编辑 config.toml 文件,设置你的Dizzylab cookie:

  1. 在浏览器中登录 Dizzylab
  2. 打开开发者工具 (F12)
  3. 在网络选项卡中找到任意请求
  4. 复制Cookie头的值
  5. 将cookie值粘贴到配置文件中

Cookie格式示例:

sessionid=your_session_id_here; csrftoken=your_csrf_token_here

3. 运行同步

# 干运行 - 仅列出专辑,不下载
./dizzysync --dry-run

# 开始同步
./dizzysync

# 仅下载元数据(专辑信息、封面、README、NFO),不下载音频文件
./dizzysync --metadata-only

# 仅下载指定ID的专辑
./dizzysync --id dts

# 组合使用:仅下载指定专辑的元数据
./dizzysync --id dts --metadata-only

# 使用自定义配置文件
./dizzysync -c /path/to/config.toml

# 更多命令行选项示例
./dizzysync --skip-existing                    # 跳过已存在的目录(默认true)
./dizzysync --skip-existing false              # 不跳过已存在的目录
./dizzysync --single-threaded                  # 启用单线程模式(默认true)
./dizzysync --single-threaded false            # 禁用单线程模式
./dizzysync --generate-readme false --generate-nfo false  # 不生成README和NFO文件
./dizzysync -o ./MyMusic                       # 指定输出目录
./dizzysync --output-dir /path/to/music        # 指定输出目录(完整格式)

配置选项

注意: 大部分配置选项都可以通过命令行参数覆盖。

下载格式

config.toml 中配置要下载的格式:

[download]
formats = ["320", "FLAC"]  # 可选: "128", "320", "FLAC", "gift"
  • "128" - 128kbps MP3 (较小文件)
  • "320" - 320kbps MP3 (高质量)
  • "FLAC" - 无损FLAC (最高质量)
  • "gift" - 特典内容

文件组织

目录模板

[paths]
# 自定义目录结构,支持变量替换
directory_template = "{album}/@{label}"  # 默认: 专辑名/@厂牌名
# directory_template = "{year}/{label}/{album}"  # 按年份分类
# directory_template = "{label}/{album}"  # 按厂牌分类

支持的变量:

  • {album} - 专辑名
  • {label} - 厂牌名
  • {authors} - 作者名
  • {year} - 当前年份
  • {date} - 当前日期 (YYYY-MM-DD)

文件结构

音频文件(128/320/FLAC)直接放在专辑目录下,特典内容放在 gift/ 子目录中:

DizzySync/
└─ Example Album/
   └─ @Example Label/
      ├─ 01 Track One.mp3
      ├─ 02 Track Two.mp3
      ├─ 01 Track One.flac
      ├─ 02 Track Two.flac
      ├─ gift/
      │  └─ bonus.zip(解压内容)
      ├─ cover.jpg
      ├─ README.md
      └─ album.nfo

元数据模式

可以通过配置文件或命令行参数启用元数据模式:

[behavior]
metadata_only = true  # 仅下载元数据,不下载音频文件

或使用命令行参数:

./dizzysync --metadata-only

元数据模式会下载:

  • 专辑信息和详细描述
  • 专辑封面(如果可用)
  • README.md 文件(包含专辑详细信息)
  • NFO 文件(媒体库兼容格式)

不会下载任何音频文件。这对以下场景很有用:

  • 快速建立音乐库索引
  • 节省存储空间
  • 仅获取专辑信息进行浏览

指定专辑下载

可以使用--id参数下载指定ID的单个专辑:

./dizzysync --id SWQX-01

这对以下场景很有用:

  • 只想下载特定的专辑
  • 测试下载功能
  • 重新下载某个专辑
  • 与其他参数组合使用(如--metadata-only

专辑ID通常可以从Dizzylab的专辑页面URL中获取,格式如:https://www.dizzylab.net/d/SWQX-01/

命令行选项

以下命令行参数可以覆盖配置文件设置:

注意: 对于布尔值参数,可以省略值(默认为true)或明确指定true/false。例如:

  • --skip-existing 等同于 --skip-existing true
  • --skip-existing false 明确设为false

下载行为

  • --metadata-only - 仅下载元数据,不下载音频文件
  • --skip-existing [true/false] - 跳过已存在的目录(省略值时默认为true)
  • --single-threaded [true/false] - 单线程模式(省略值时默认为true)

文件生成

  • --generate-readme [true/false] - 生成README.md文件(省略值时默认为true)
  • --generate-nfo [true/false] - 生成NFO文件(省略值时默认为true)

文件组织

  • -o DIR, --output-dir DIR - 指定输出目录

其他

  • --id ALBUM_ID - 仅下载指定ID的专辑
  • --dry-run - 仅列出专辑,不下载
  • --debug - 启用调试模式
  • -c FILE, --config FILE - 指定配置文件路径

项目路线图

Phase 1: Core Demo (当前)

  • 配置文件解析
  • HTTP客户端和cookie管理
  • 用户信息获取
  • 专辑列表获取
  • 文件下载功能
  • 文件组织逻辑
  • 命令行界面
  • 元数据模式
  • 指定专辑ID下载
  • 命令行参数覆盖配置

Phase 2: GUI界面 (计划中)

  • Tauri框架集成
  • Web前端界面
  • 下载进度显示
  • 配置管理界面

Phase 3: 功能增强 (未来)

  • 断点续传
  • 增量同步
  • 多用户支持
  • 自动更新

故障排除

常见问题

  1. "无法从页面中提取用户ID"

    • 检查cookie是否正确
    • 确保cookie没有过期
  2. "无法从页面中提取下载密钥"

    • 某些专辑可能不支持特定格式
    • 尝试其他格式或检查专辑页面
  3. 下载失败

    • 网络连接问题
    • 服务器临时不可用
    • Cookie过期

获取帮助

如果遇到问题,请:

  1. 检查日志输出
  2. 尝试使用 --dry-run 模式
  3. 提交issue并附上错误信息

免责声明

此工具仅用于下载用户已合法购买的内容。请遵守Dizzylab的服务条款和版权法律。

License

MIT License

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages