# MangTool —— 音乐文件一键导入工具 面向 Navidrome 音乐服务器的音频文件智能导入管线。 ## 一键导入工作流 将待处理的音频文件放入 `Input/` 目录,点击「开始一键导入」即可自动完成: 1. **扫描** — 递归扫描 Input 目录下的所有音频文件 2. **校验** — 检查 Title/Artist/Album 元数据是否完整,缺失文件移入 Rejected/MissingMetadata 3. **繁简转换** — 将繁体中文标签自动转为简体 4. **格式转换** — 将 WAV/APE/AIFF/WV/TTA 转为 FLAC(需 FFmpeg),失败文件移入 Rejected/ConversionFailed 5. **去重** — 基于 Artist+Album+Disc+Track+Title 归一化身份标识对比 Library 已有文件,重复移入 Rejected/Duplicate 6. **入库** — 有效文件按 `Artist/Album (year)/NN - Title.ext` 布局移入 Library ## 目录结构 ``` BasePath/ ├── Input/ ← 放入待处理的音频文件 ├── Library/ ← 整理后的 Navidrome 兼容曲库 └── Rejected/ ← 被拒绝的文件按原因分类 ├── MissingMetadata/ ├── Duplicate/ ├── ConversionFailed/ ├── Unreadable/ └── Other/ ``` ## 构建与运行 ```bash # 后端 cd backend && mvn clean package -DskipTests && mvn spring-boot:run # 前端(开发模式) cd frontend && npm ci && npm run dev # Docker cd docker && docker compose up -d --build ``` ## 一次性清理历史曲库 正常导入不会扫描或删除 `Library` 中的历史文件。升级后如需清理旧数据,先运行默认的预览模式: ```bash ./scripts/cleanup-library.sh --library /path/to/Library --dry-run ``` 确认输出后再显式执行: ```bash ./scripts/cleanup-library.sh --library /path/to/Library --execute ``` 脚本会优先把音频内嵌封面提取为专辑目录的 `cover.jpg/png`。只有目录和音频都没有封面时,才删除音频及同 basename 的 `.lrc`、`.cue`、`.json`、`.txt` 和图片 sidecar;不会删除公共 `cover.jpg/png` 或其他曲目文件。 ## 技术栈 - 后端:Spring Boot 2.7 + Java 8 + Maven - 前端:Vue 3 + Vite + TypeScript + Element Plus - 音频元数据:jaudiotagger - 繁简转换:opencc4j - 格式转换:FFmpeg