[2026-09-27] eagle: personal/plans/music-artist-albumartist-repair.md

This commit is contained in:
Alexey Martemyanov committed 2026-09-27 15:09:53 +06:00
1 parent 62c21e4d33
commit c94ae77cbb
1 file changed
+110 -15
+110 -15
View File
@@ -4,7 +4,7 @@ created: '2026-09-27'
updated: '2026-09-27'
type: plan
namespace: personal
status: session14-junk-album-and-track-cleaned-171-rows
status: session15-root-files-one-album-rule-78-rows
tags:
- music
- metadata
@@ -23,7 +23,86 @@ related:
# Music `artist` + `albumartist` Repair — правила Alex и ход работ
> ## 🔴 АКТУАЛЬНО НА КОНЕЦ СЕССИИ 10 (2026-09-27) — ИСТОРИЧЕСКОЕ, см. сессию 12 выше
## 🟢 АКТУАЛЬНО НА КОНЕЦ СЕССИИ 15 (2026-09-27) — читать это первым
> ```
> APPLY-PLAN.csv 7861 строка md5 bd14e6c64a93b422bbdfdaa554dea0c9
> DIFF-new-vs-38.csv (перегенерировать — см. «Что делать дальше»)
> tag-fix-plan.csv 7861 строка md5 203726ebfd2814e2328636df31337238 (НЕ ПРАВИТЬ)
> ```
>
> ### 🔴 ГЛАВНОЕ ПРАВИЛО СЕССИИ 15 — КОРЕНЬ АРТИСТА = ОДИН АЛЬБОМ
>
> Alex прямым текстом:
> > «Муммий Тролль, Агата, Ария, Rammstein, Жуки, Князь, Benassi, банд эрос — то что в корне
> > лежит мы **считаем одним альбомом**. И `albumartist` соответственно **титульного исполнителя**
> > ставим. **не надо ничего `cur` брать!** редактируешь блядь csv!»
>
> | Поле | Значение для файла ПРЯМО в корне артиста |
> |---|---|
> | `album` | **имя корня** (= имя папки-артиста как есть, включая двойную «мм»: `Муммий Тролль`) |
> | `albumartist` | **имя корня** (титульный исполнитель) |
> | `cur_album` / `cur_artist` | **НЕ ИСПОЛЬЗОВАТЬ ВООБЩЕ** — теги этих файлов мусорные (см. ниже) |
>
> 🔴 **ОБОСНОВАНИЕ (проверено фактами):** у файлов в корнях артистов в теге **нет валидного
> альбома ни у одного**. Всё пусто, либо битьё CP1251→UTF8, либо водяной знак:
>
> | корень | мусорных | есть `cur_album` | из них валидных |
> |---|---:|---:|---:|
> | Агата Кристи | 21 | 4 | **0** — все `(Àãàòà)` = битьё |
> | КняZz | 12 | 6 | **0** — `[muzmo.ru]`, `[~melody.az~]` |
> | Муммий Тролль | 11 | 8 | **0** — `(Ìóììèé Òðîëëü)` = битьё |
> | Жуки | 9 | 0 | — |
>
> Отсюда: `album` = имя корня — это **единственный корректный вариант**, а не fallback.
>
> ### ✅ СДЕЛАНО В СЕССИИ 15 — 78 строк, 7 корней
>
> Скрипт `~/Downloads/music-tags/fix_root_album.py` (dry-run по умолчанию, `--apply` для записи).
> Бэкап: `APPLY-PLAN.csv.bak-rootalbum-20260927-150904`.
> Верификация: `check_root_rule.py` → **0 нарушений** по всем 7 корням.
>
> | корень | файлов в корне | `album` | `albumartist` |
> |---|---:|---|---|
> | `Агата Кристи` | 60 | `(Агата)`×15, `Опиум`×4, `Позорная звезда`×2, `Триллер`×2 … → `Агата Кристи` | `Психея`, `X-PRESs`, `Би-2`, `Пикник & Вадим Самойлов`, `Галанин Сергей`, `Вадим Самойлов`, `В.Шахрин, А.Пантыкин мл.` → `Агата Кристи` |
> | `Rammstein` | 3 | `misc`×2, `Das Modell` → `Rammstein` | — |
> | `Жуки` | 12 | `Батарейка`, `Легендарные песни`, `Прикольный СуперХит 5` → `Жуки` | `Рома Жуков`, `Виктор Жуков` → `Жуки` |
> | `КняZz` | 18 | `Письмо из Трансильвании`×2, `Любовь негодяя`, `Баркас`, `Магия Калиостро`, `Руки к небу` → `КняZz` | — |
> | `Benassi Bros` | 15 | `Hypnotica`×2, `Miami Sampler 2002 CDS`, `Pumphonia`, `Techno 2003` … → `Benassi Bros` | — |
> | `Банд Эрос` | 7 | `Коламбия Пикчерз не Представляет`×2, `Russian R'n'B vol.1` → `Банд Эрос` | `Банд'Эрос`×6, `VIP77` → `Банд Эрос` |
> | `Ария` | 0 | — (в корне нет файлов) | — |
>
> ### ⏳ ОТКРЫТО: `Муммий Тролль` — 23 строки, вопрос задан, ответа НЕТ
>
> Папка называется **`Муммий Тролль`** (две «м»), а в файлах `albumartist='Мумий Тролль'`
> (одна «м» — правильное написание группы). Вопрос Alex: ставить как в папке или правильное
> написание? **НЕ ПРАВИТЬ, пока Alex не ответит.**
> ```
> album: 7× '(Муммий Тролль)', 1× 'Музыка.ру 5', 1× 'Other' (9 нарушений)
> albumartist: 13× 'Мумий Тролль' (13 нарушений)
> ```
>
> ### 🔴 МЕТОД-УРОК СЕССИИ 15: НЕ ИЗОБРЕТАТЬ ДЕФЕКТЫ, ЧИТАТЬ ФАКТЫ
>
> Alex трижды за сессию ловил на преждевременных выводах:
> 1. Я объявил «нечего исправлять» по Агате — на деле **72 нарушения `album` + 29 `albumartist`**.
> 2. Я предположил, что `117`/`099` в `Sbornik_Novij_Rok` — «порядковые номера сборников» и
> обнулил их. **Неверно:** у 196/200 файлов папки номер в том же формате → это **реальный
> номер трека**. Откат: `fix_track_restore.py`, 8 строк восстановлено.
> 3. Детектор `check_root_files.py` дал 420 «нарушений», из них **413 — ложные** (обычные
> сборники `Various Artists` с разными артистами). Реальных — 7.
>
> **Следствие:** перед «исправлением» класса — проверить его на **соседних файлах** и убедиться,
> что правило применимо ко всем, а не к выхваченным строкам.
>
> ### 🔴 КЛАСС `Various Artists` — ПРОВЕРЕН, 0 НАРУШЕНИЙ (не трогать)
>
> `check_va.py`: 1229 файлов с `aa='Various Artists'` в 45 папках. Нарушений правила
> «VA только при РАЗНЫХ исполнителях» — **0**. Все 45 папок имеют ≥2 разных `new_artist`.
>
> ──
> ## 🔴 АКТУАЛЬНО НА КОНЕЦ СЕССИИ 10 (2026-09-27) — ИСТОРИЧЕСКОЕ, см. сессию 14 выше
>
> ```
> APPLY-PLAN.csv 7861 строка md5 7679ee01a2aa8f28623b6fb8559d7381
@@ -411,27 +490,43 @@ Alex указал на `Алиса в Стране Чудес (Диск2)/04` =
по mp3 (7861), поэтому эти форматы в него не попали by design.
- `НЕТ-В-38` (41) = есть в новом плане, не было в 38-м.
### 📌 Что делать дальше (порядок приоритета, обновлён в сессии 14)
### 📌 Что делать дальше (порядок приоритета, обновлён в сессии 15)
0. ✅ **ЗАКРЫТО в сессии 14:** мусорный `new_album` (20 строк) и мусорный `new_track` (151 строка).
`disk_v2/2 ALT,PUNK/HARD` → `RADIO 2 ALT,PUNK`. `disk/3 SHANSON/Трофим` — **не трогаем**
(Alex: «альбомы — это правильно»).
1. **Ответить на оставшиеся вопросы по `album`** — особенно #4 (4 разных формата `album`
0. ✅ **ЗАКРЫТО в сессии 15:** корни артистов = один альбом (78 строк, 7 корней);
класс `Various Artists` проверен (0 нарушений); мусорный `new_album`/`new_track` (сессия 14).
Откат моей ошибки: 8 строк `track` в `Sbornik_Novij_Rok` / `Детский хит` восстановлены.
1. ⏳ **ОТВЕТ ALEX НУЖЕН:** `Муммий Тролль` — 23 строки. `album`/`albumartist` = `Муммий Тролль`
(как папка, две «м») или `Мумий Тролль` (правильное написание группы, одна «м»)?
**НЕ ПРАВИТЬ до ответа.**
2. **Ответить на оставшиеся вопросы по `album`** — особенно #4 (4 разных формата `album`
внутри `!Radio`) и класс «`album` = название песни» (Алексин/Шалавы, Дискотека Авария).
2. **Дожать класс «жанр унаследован от `cur_genre`»** — `Enigma/Sleep` 13 строк `General Folk`
3. **Дожать класс «жанр унаследован от `cur_genre`»** — `Enigma/Sleep` 13 строк `General Folk`
(Enigma = нью-эйдж/эмбиент, не фолк). Тот же корень дефекта, что и 26 исправленных строк.
3. **Остались неразобранными из ручного прохода `album`:** `z Другое, Enigma, Ленинград` →
4. **Остались неразобранными из ручного прохода `album`:** `z Другое, Enigma, Ленинград` →
`Сосни попса`; `detskiy_hor_benassi_satisfaction.mp3` → `Горячие Синглы 2004`;
`Бутусов & Ю-Питер/Девушка По Городу`; корни артистов (Жуки, Потап & Каменских, Света, Серёга)
с `album` = имя артиста.
4. **Решить судьбу 51 папки с рваной нумерацией** — но сначала: стоит ли вообще трогать
`Бутусов & Ю-Питер/Девушка По Городу`.
5. **Решить судьбу 51 папки с рваной нумерацией** — но сначала: стоит ли вообще трогать
номера в подборках `!Radio`.
5. Перегенерировать `DIFF-new-vs-38.csv` после любых правок плана
6. 🔴 **ОБЯЗАТЕЛЬНО: перегенерировать `DIFF-new-vs-38.csv`** после правок сессии 15
(`python3 diff_new_vs_38.py > /tmp/log 2>&1`) — **и всегда верифицировать свой скрипт
перечитыванием** (см. метод-урок сессии 14).
6. Применение плана к файлам — **отдельное «go»** от Alex, через `tagwriter:v2`
перечитыванием** (см. метод-урок сессии 15: не изобретать дефекты, читать факты).
7. Применение плана к файлам — **отдельное «go»** от Alex, через `tagwriter:v2`
(см. `[[personal/plans/tagwriter-container]]`).
### 🛠 Инструменты сессии 15 (`~/Downloads/music-tags/`)
| Скрипт | Назначение |
|---|---|
| `fix_root_album.py` | правило «корень артиста = один альбом», 78 строк, dry-run по умолчанию |
| `check_root_rule.py` | верификация: `album`/`albumartist` == имя корня → 0 нарушений |
| `check_va.py` | проверка класса `Various Artists` (1229 файлов / 45 папок → 0 нарушений) |
| `check_root_files.py` | детектор файлов в корне; ⚠️ даёт много ложных (сборники) |
| `fix_junk_album.py` + `verify_junk_album.py` | мусорный `new_album` (20 строк, сессия 14) |
| `fix_track_v3.py` + `fix_track_rest7.py` + `verify_track.py` | мусорный `new_track` (151 строка) |
| `fix_track_restore.py` | 🔴 откат моей ошибки: 8 реальных номеров треков восстановлены |
| `scan_junk_album.py` | скан мусорных значений `new_album` |
## 🔴 АКТУАЛЬНО НА КОНЕЦ СЕССИИ 11 (2026-09-27) — ИСТОРИЧЕСКОЕ
```