Files
am-downloader/README.md
T

110 lines
2.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# AM Music Deduper
轻量级家庭 NAS 音乐库去重服务,面向 `AllMusic/{username}/` 场景。
## 处理模型
```text
AllMusic
↓
文件稳定检测(size + mtime)
↓
L1:size + head/tail 64 KiB
↓
完整 SHA-256
├─ 相同 → Exact Duplicate → hard link
└─ 不同 → duration ±3s → Chromaprint
├─ 高相似且版本一致 → hard link
├─ 中等相似/版本冲突 → review
└─ 低相似 → 保留
```
### 安全规则
- SHA-256 是 Exact Duplicate 的最终依据;L1 只负责缩小候选范围。
- 不根据文件名、歌手、歌名、专辑或来源单独判重。
- 确认相同版本后,优先使用 hard link 保留每个用户原来的逻辑路径。
- 用户删除自己的路径不会影响其他 hard link;最后一个 link 删除后数据才释放。
- hard link 要求源文件和目标文件位于同一文件系统。
- 正在写入的文件必须先通过稳定性检查。
- L2 对版本标记冲突的文件进入 review,不自动合并。
- SQLite 是加速索引,文件系统是最终事实;数据库丢失后可以重新扫描。
- `.dedupe` 不参与音乐扫描,避免把内部文件再次处理。
## CLI
```bash
# 建立/更新索引,不修改音乐文件
am-deduper scan /music/AllMusic --db /data/dedupe.db
# Exact + L2;首次执行建议 dry-run
am-deduper dedupe /music/AllMusic --db /data/dedupe.db --dry-run
# 确认后执行
am-deduper dedupe /music/AllMusic --db /data/dedupe.db
# 长驻监听:默认只自动执行安全的 Exact hard-link
am-deduper watch /music/AllMusic --db /data/dedupe.db
# 开启 L2 acoustic 匹配;建议先 dry-run 验证
am-deduper watch /music/AllMusic --db /data/dedupe.db --l2
```
## Feiniu NAS 部署
生产环境采用 **Gitea 源码 → NAS 本地 Docker build → NAS 本地运行**。
不需要 Docker Registry,也不需要让 wjyhk 构建生产镜像。
建议目录:
```text
NAS
├── Gitea 仓库
│ └── am-deduper/
├── AllMusic/
│ ├── admin/
│ ├── alice/
│ └── bob/
└── AppData/
└── am-deduper/
└── dedupe.db
```
### NAS `.env`
```dotenv
ALLMUSIC_PATH=<NAS绝对路径>/AllMusic
DEDUPE_DATA_PATH=<NAS绝对路径>/AppData/am-deduper
```
### 首次部署
```bash
cd <Gitea仓库目录>/am-deduper
git pull
mkdir -p <NAS绝对路径>/AppData/am-deduper
docker compose build
docker compose run --rm am-deduper scan /music/AllMusic --db /data/dedupe.db
docker compose run --rm am-deduper dedupe /music/AllMusic --db /data/dedupe.db --dry-run
```
确认 dry-run 输出后,再执行正式 Exact/L2:
```bash
docker compose run --rm am-deduper dedupe /music/AllMusic --db /data/dedupe.db
```
然后启动长期监听:
```bash
docker compose up -d
```
更新版本:
```bash
git pull
docker compose build
docker compose up -d
```