[2026-09-28] eagle: personal/plans/music-artist-albumartist-repair.md personal/tech/music-tags-repair-truenas.md
This commit is contained in:
1 parent
3466ad094d
commit
b718a09e95
2 files changed
+157
-10
No files matched your search
@@ -4,7 +4,7 @@ created: '2026-09-27'
|
||||
updated: '2026-09-27'
|
||||
type: plan
|
||||
namespace: personal
|
||||
status: ДИФФ-ОТ-БД-СВЕРЕН / СБОРЩИК-v2-НЕ-НАПИСАН (сборники вне дифа) / ПРОГОН-НЕ-ЗАПУСКАТЬ-БЕЗ-ПОДТВЕРЖДЕНИЯ
|
||||
status: ДИФФ-v6-СОБРАН-ПОЛНЫЙ-ПРОХОД-ПО-СБОРНИКАМ / СБОРЩИК-НАПИСАН / DRY-RUN-НЕ-ЗАПУЩЕН / ПРОГОН-НЕ-ЗАПУСКАТЬ-БЕЗ-ПОДТВЕРЖДЕНИЯ
|
||||
tags:
|
||||
- music
|
||||
- metadata
|
||||
@@ -35,11 +35,95 @@ related:
|
||||
**Что делаем:** привести ID3-теги библиотеки `/mnt/RED_2TB/storage/Music` (7861 файл)
|
||||
в порядок, чтобы Navidrome показывал правильные альбомы/исполнителей/жанры.
|
||||
|
||||
**Главный артефакт на сейчас (27 сен, сессия ~36):**
|
||||
**Главный артефакт на сейчас (27 сен, сессия 38):**
|
||||
|
||||
```
|
||||
⚠️ ДИФФ ОТ БАЗЫ ГОТОВ, СВЕРЕН С ПЛАНОМ. ПРОГОН НЕ ЗАПУСКАТЬ БЕЗ ПОДТВЕРЖДЕНИЯ ALEX.
|
||||
⚠️ ДИФФ v6 СОБРАН — ПОЛНЫЙ ПРОХОД ПО СБОРНИКАМ. ПРОГОН НЕ ЗАПУСКАТЬ БЕЗ ПОДТВЕРЖДЕНИЯ ALEX.
|
||||
|
||||
ДИФФ: ~/Downloads/music-tags/DIFF-v6.csv
|
||||
102 строки · 553 правки · 282 файла
|
||||
md5 b2b68bf9f3a0ca7645cb0ef90ec95f30
|
||||
по полям: album 183 · artist 155 · albumartist 157 · track 58
|
||||
сортировка: по АЛФАВИТУ field (album → albumartist → artist → track)
|
||||
источник цели: БД Navidrome (то, что РЕАЛЬНО в тегах), НЕ канон
|
||||
План: ~/Downloads/music-tags/apply-plan-v6.csv (7861 строка, md5 4480cc0d1ba81db6380b935a459e7eac)
|
||||
Сборщик: ~/Downloads/music-tags/build_diff_v6.py ← 8 правил, заменил build_diff_from_db.py
|
||||
Канон: ~/Downloads/music-tags/APPLY-PLAN.csv (2 882 935 B — эталон ручных правок, НЕ ПЕРЕЗАПИСЫВАТЬ)
|
||||
Бэкапы: DIFF-v6.csv.bak-20260927-* · DIFF-db-to-fix.csv.bak-20260927-234901
|
||||
|
||||
ЧЕМ v6 ОТЛИЧАЕТСЯ ОТ v5 (DIFF-db-to-fix.csv):
|
||||
album 60 → 183 файлов (+123: сборники, которых v5 не видел)
|
||||
artist 154 → 155 (+1: Т9)
|
||||
albumartist 157 → 157 (=)
|
||||
track 58 → 58 (=)
|
||||
```
|
||||
|
||||
🔴 **ГЛАВНЫЙ УРОК СЕССИИ 38: СБОРЩИК ПРАВИЛ ПО СОВПАДЕНИЮ, А НЕ ПО ПАПКЕ.**
|
||||
`build_diff_from_db.py` содержал **три хардкод-префикса** (`!Рэп/Трофим/`, `!Рэп/Птаха…`,
|
||||
`Тема дороги.mp3`) и **не знал правила сборников вообще**. Поэтому в дифф v5 не попали:
|
||||
`!Retro` (46), `!Rock&Folk/!rock_o_pop` (24), `!Pop, Club, Любэ/!ZabuGor` (15),
|
||||
`!Классика` (5), `9999 - Разное/*` (30), 3 корневых файла = **123 файла**.
|
||||
Alex: «ты сказочный долбоёб. у меня даже слов нет на этом моменте».
|
||||
🔑 **ПРАВИЛО: прежде чем отдавать дифф — сверить его не с самим собой, а с постановкой задачи.**
|
||||
Я сверил `verify_v5_vs_diff.py` (дифф↔план, сходится 1:1) и объявил «готово» — но обе стороны
|
||||
сравнения были построены на одном и том же кривом сборщике. **Сверка сама с собой ничего не доказывает.**
|
||||
|
||||
🔴 **ФАКТ: ПРОХОД v3 БЫЛ ТОЧЕЧНЫЙ, НЕ ПОЛНЫЙ — 18 папок из 23 правились по 1-3 файла.**
|
||||
Правило в v3-скрипте срабатывало только при `album == title` или `album == имя файла`.
|
||||
Файлы, у которых `album` был **чужим альбомом** (не равен ни title, ни файлу), проскакивали.
|
||||
```
|
||||
!Pop, Club, Любэ/!ZabuGor правилось 1 из 15 !Retro/Забугр 3 из 32
|
||||
!Pop, Club, Любэ/Green Apelsin правилось 1 из 38 !Rock&Folk/!rock_o_pop 2 из 57
|
||||
!Pop, Club, Любэ/Алексин правилось 1 из 14 !Rock&Folk/Ария, Кипелов 3 из 12
|
||||
!Рэп/Птаха - Красивые… 1 из 8
|
||||
ПОЛНЫХ проходов всего 6: Little Big (1/1) · Руки вверх (2/2) · Хабиб (1/1)
|
||||
· Юрий Антонов (1/1) · Юрий Никулин (3/3) · Серьга (1/1)
|
||||
```
|
||||
🔑 **ДИАГНОСТИКА «проход был полным?»: `collections.Counter(cur_album)` по папке.**
|
||||
Много уникальных значений = прохода не было. `!Retro`: **62 уникальных album на 236 файлов**.
|
||||
Скрипты: `full_check_sborniki.py`, `why_resurface.py`.
|
||||
|
||||
✅ **ПРАВИЛА СБОРЩИКА v6 (`build_diff_v6.py`) — 8 штук, В КОДЕ:**
|
||||
```
|
||||
1. Папки '!*' → album = basename БЕЗ ведущих '!'
|
||||
albumartist НЕ ТРОГАЕМ (Various Artists как есть)
|
||||
artist НЕ ТРОГАЕМ
|
||||
2. Папки 'Разное' → album = имя папки-владельца (НЕ имя файла)
|
||||
9999 - Разное/X albumartist = владелец категории ('Агата Кристи', уже так)
|
||||
3. Трофим album: срез префикса 'NN ' (только 01-04 Аристократия помойки)
|
||||
albumartist 'Трофим' → 'Сергей Трофимов'
|
||||
artist 'Трофим' → 'Сергей Трофимов'
|
||||
фиты 'С.Трофимов,группа X' → 'Сергей Трофимов и группа «X»'
|
||||
track: пусто → номер из имени файла (#N_MM_)
|
||||
4. Птаха album 'Птаха - Красивые, богатые (2009)' → 'Красивые, богатые'
|
||||
5. Ленинград/Тема дороги album 'саунд треки к фильму' → 'Ленинград'; artist 'Бумер' → 'Ленинград'
|
||||
6. Адресно Radio !Pop, Club, Любэ/detskiy_hor_benassi… → album='Radio'
|
||||
!Pop, Club, Любэ/!Radio/Stylemasters… → album='Radio'
|
||||
7. artist НЕ ТРОГАЕМ нигде, кроме п.3 и п.5
|
||||
8. Т9 - Вдох-Выдох album='Вдох-выдох', artist='Т9' (внешний источник, Discogs 2008)
|
||||
```
|
||||
|
||||
🔑 **ЦЕЛЕВАЯ МОДЕЛЬ СБОРНИКОВ (окончательно, Alex 2026-09-27):**
|
||||
```
|
||||
album = имя папки-владельца БЕЗ '!' ← ЕДИНСТВЕННОЕ, ЧТО МЕНЯЕМ в сборниках
|
||||
albumartist = 'Various Artists' (сборники) / 'Агата Кристи' (9999 - Разное)
|
||||
artist = реальный исполнитель трека ← НЕ ТРОГАЕМ НИКОГДА
|
||||
```
|
||||
Alex дословно: «**АЛЬБОМ БЛЯДЬ rock_o_pop** не albumartist блядь! для сборников типа
|
||||
rock_o_pop **artist = 'Various Artists'**!!!». `!` — служебный префикс сортировки, **в тег НЕ пишется
|
||||
никогда**. Антидефект: в `!ZabuGor` у Marlyn Manson `album='!ZabuGor'` — `!` **попал в тег**.
|
||||
|
||||
✅ **ДИФФ v6 СВЕРЕН ПО ПАПКАМ — 16 album-строк, все ожидаемые на месте** (см. таблицу
|
||||
в [[personal/tech/music-tags-repair-truenas]] § сессия 38).
|
||||
|
||||
✅ **ДУБЛИ ТРОФИМА — ПОДТВЕРЖДЕНО УДАЛЕНИЕ (проверка `find` на NAS).**
|
||||
`!Рэп/Трофим/` **157 файлов** (эталон, живое дерево). Копии `!Radio/z Старое/disk*/3 SHANSON/Трофим`
|
||||
— **0 живых**, остались только в `backup/` (220) и `backup_album_root_…-229/` (49).
|
||||
🔑 Команда проверки: `find … -ipath "*Трофим*" -name "*.mp3" -printf "%h\n" | sort | uniq -c`.
|
||||
|
||||
**Главный артефакт ПРЕДЫДУЩЕЙ сессии (сессия 37) — АРХИВ:**
|
||||
|
||||
```
|
||||
ДИФФ: ~/Downloads/music-tags/DIFF-db-to-fix.csv
|
||||
16 857 B · 92 строки с заголовком = 91 ЗАПИСЬ (ПАПКА 26 · ТРЕК 65)
|
||||
md5 a5f2b910826dcc46474b6e26513f414f
|
||||
@@ -47,13 +131,9 @@ related:
|
||||
⚠️ СЧЁТ: 91 запись ≠ 92 строки файла (заголовок) и ≠ 87
|
||||
(2 файла с ДВОЙНОЙ правкой: Тема дороги album+artist,
|
||||
Птаха album в одну сторону)
|
||||
сортировка: по АЛФАВИТУ field (album → albumartist → artist → track)
|
||||
источник цели: БД Navidrome (то, что РЕАЛЬНО в тегах), НЕ канон
|
||||
🔴 УСТАРЕЛ: не содержит сборников (123 файла). Использовать DIFF-v6.csv.
|
||||
План: ~/Downloads/music-tags/apply-plan-v5.csv (7861 строка, md5 d4392b11f143844c590a0a9c4a752208)
|
||||
меняется 159 файлов · без изменений 7702
|
||||
по полям: albumartist 157 · artist 154 · album 60 · track 58 · title 0 · genre 0
|
||||
Сборщик: ~/Downloads/music-tags/build_diff_from_db.py
|
||||
Канон: ~/Downloads/music-tags/APPLY-PLAN.csv (2 882 935 B — эталон ручных правок, НЕ ПЕРЕЗАПИСЫВАТЬ)
|
||||
Сборщик: ~/Downloads/music-tags/build_diff_from_db.py ← 🔴 ЗАМЕНЁН на build_diff_v6.py
|
||||
```
|
||||
|
||||
✅ **СВЕРКА ДИФФ ↔ ПЛАН (27 сен, сессия ~36) — СХОДИТСЯ.** Скрипт
|
||||
|
||||
Reference in new issue
Block a user