haivala/dj-usb-tkit
GitHub: haivala/dj-usb-tkit
基于 Rust + Tauri 构建的本地优先 DJ 音乐库管理器,支持音乐索引、播放列表管理、USB 导入导出以及面向 Pioneer CDJ 的诊断与修复。
Stars: 5 | Forks: 0
# DJ USB Tkit
基于 Rust + Tauri 构建的本地优先 DJ 音乐库管理器和 USB 导出工具。
## 应用需求
- 本地优先的桌面工作流,支持音乐库索引、播放列表管理、USB 导入/导出、诊断/修复以及原生播放。
- 快速准备流程:快速索引音乐库,构建播放列表,仅分析目标播放列表中缺失的曲目,然后导出。
- 分析引擎支持:`stratum`(默认)和可选的 `essentia`。
- 导出同步模式:`mirror`(精确播放列表同步)和 `additive`(追加缺失曲目而不移除现有成员)。
- 严格的一致性报告与操作可用性区分开来,以便用户区分“可用”和“完全一致性检查无误”的结果。
详细行为和需求记录在 `docs/` 中,请从 `docs/README.md` 开始阅读。
项目代码采用 `MIT` 许可;在相同条款下接受贡献( inbound = outbound )。详见 `CONTRIBUTING.md`。
## 前置条件
- [Rust](https://rustup.rs/) (stable)
- [Node.js](https://nodejs.org/) 24 LTS(前端构建/测试以及可选的 Essentia 运行时路径需要)
- Tauri v2 所需的系统库(见下文)
- 用于发布构建包的 Tauri cli v2:
```
cargo install tauri-cli --version '^2'
```
确保 `~/.cargo/bin` 已添加到 `PATH` 环境变量中。
### 系统库
**Arch Linux:**
```
sudo pacman -S --needed webkit2gtk-4.1 gtk3 libappindicator-gtk3 librsvg base-devel openssl pkg-config
```
**Ubuntu / Debian:**
```
sudo apt install libwebkit2gtk-4.1-dev libgtk-3-dev libappindicator3-dev librsvg2-dev build-essential libssl-dev pkg-config
```
**Fedora:**
```
sudo dnf install webkit2gtk4.1-devel gtk3-devel libappindicator-gtk3-devel librsvg2-devel gcc gcc-c++ openssl-devel pkg-config
```
有关其他发行版,请参阅 [Tauri 前置条件文档](https://v2.tauri.app/start/prerequisites/#linux)。
## 构建与运行
```
cd desktop/src-tauri
cargo build
cargo run
```
`cargo run` 不需要 Tauri CLI。构建发布包( `tauri build` )时需要 Tauri CLI。
## 发布包
### macOS
安装前置条件并运行以下命令构建:
```
chmod +x scripts/macos-build-setup.sh
./scripts/macos-build-setup.sh
```
### Windows
以管理员身份打开 PowerShell 并运行:
```
powershell -ExecutionPolicy Bypass -File scripts\windows-build-setup.ps1
```
### Linux
运行以下命令构建安装程序/软件包:
```
./scripts/release.sh
```
该脚本会在打包前,将一个干净的前端 bundle 暂存到 `vanilla-ui/dist` 中(排除 `node_modules` 等开发目录)。
在 Linux 上,默认的构建包格式为 `deb,rpm,appimage`。AppImage 打包需要 `PATH` 中存在可用的 `linuxdeploy` 二进制文件。
当包含 AppImage 时,脚本默认还会设置 `NO_STRIP=1`,以避免在启用了 RELR 的系统库(常见于 Arch 和较新的发行版)上出现 linuxdeploy strip 失败。设置 `LINUXDEPLOY_NO_STRIP=0` 可禁用此行为。
发布版本不会打包 Essentia 资产或 Node 运行时。
当使用预编译二进制文件和默认的 `stratum` 分析引擎时,该应用无需 Node 即可运行。
仅在从源码构建(前端/工具链)或启用可选的 Essentia 分析引擎时才需要 Node。
当用户启用 Essentia 引擎时,可以在应用内的 **设置(Settings)** 中下载 Essentia。
Linux 打包说明:
- AppImage 打包了 Tauri/WebKit 技术栈所需的大多数 GUI/运行时依赖项(例如 `webkit2gtk`、`gtk-3`、`libsoup`、`javascriptcoregtk`、`glib`、`gio`、`pango` 和 `cairo`)。
- 遵循 AppImage 的常规做法,核心系统库仍由宿主机提供。这包括诸如 `libc`、`libm`、`libpthread`、`libstdc++`、`libX11` 和 `libasound` 等库。
- Tauri UI 在运行时不需要 Node。
示例:
```
./scripts/release.sh
BUNDLES=deb,rpm ./scripts/release.sh
```
构建产物将输出至:
```
target/release/bundle
```
有关发布构建工作流和发布检查,请参阅 `docs/RELEASE_BUILD_INSTALL.md`。
## 项目结构
```
backend/ – Rust library: data model, SQLite storage, commands
desktop/ – Tauri host app
vanilla-ui/ – Frontend (vanilla HTML/JS/CSS)
```
## 当前功能
- 音乐库扫描、播放列表管理以及原生本地播放。
- 带有 `mirror` 和 `additive` 播放列表同步模式的 USB 导入/导出。
- 针对缺失的曲目元数据进行本地 BPM、调性、波形和封面分析。
- USB 诊断、严格的一致性报告以及预览优先的修复操作。
- 修复工具可以帮助恢复部分损坏的 USB 数据库状态;在执行修复写入之前会创建备份,但不保证一定能恢复成功。
- 为可写但缺少预期导出数据库结构的驱动器进行 USB 初始化。
- 针对核心工作流、导出行为、诊断和 UI 交互的自动化后端与前端测试覆盖。
后端行为和应用需求记录在 `docs/` 下的功能文档中,命令参考详情请见 `docs/COMMANDS.md`。
以再分发为重点的依赖项/许可证审计记录在 `docs/THIRD_PARTY_LICENSES.md` 中。
贡献指南记录在 `CONTRIBUTING.md` 中。
## 捐赠
如果您觉得这个应用有用,请考虑支持开发者。
[在 chiph.art 上支持 DJ USB Tkit](https://chiph.art/en/dj-usb-tkit/support?utm_source=djtkit&utm_medium=readme&utm_campaign=support)
标签:DJ设备管理, MITM代理, Rust, Tauri, U盘管理, 可视化界面, 本地优先, 网络流量审计, 通知系统, 音乐播放器, 音频分析