[2026-09-27] eagle: personal/plans/music-artist-albumartist-repair.md personal/tech/id3-tag-repair.md
This commit is contained in:
1 parent
85f0f009dd
commit
62c21e4d33
2 files changed
+136
-9
No files matched your search
@@ -274,6 +274,55 @@ md5 out.csv && python3 gen.py > /tmp/run.log 2>&1 && md5 out.csv # MD5 обя
|
||||
запятой, `$1`/`$4` уезжают в фрагмент имени папки. `scope` считается правильно (`ПАПКА`/`ТРЕК`
|
||||
первое поле), а `field` — нет. Только `csv.DictReader`.
|
||||
|
||||
### 🔴 D10 — запись по ЧИСЛОВОМУ индексу вместо имени колонки затирает соседнее поле
|
||||
|
||||
`APPLY-PLAN.csv` — 16 колонок; `changed` = **индекс 15**, а `new_track` = **14**.
|
||||
Скрипт сессии 14 записал `data[i][14] = "yes"`, полагая, что это `changed` → у 20 строк
|
||||
`new_track` затёрся на `"yes"`, а `changed` остался прежним. Обнаружено только верификацией.
|
||||
|
||||
**Правило:** всегда `H = {c: i for i, c in enumerate(hdr)}` + `assert` на позиции ключевых
|
||||
колонок. Карта индексов `APPLY-PLAN.csv`:
|
||||
`0 path · 1 folder · 2 class · 3 cur_title · 4 cur_artist · 5 cur_albumartist · 6 cur_album ·
|
||||
7 cur_genre · 8 cur_track · 9 new_title · 10 new_artist · 11 new_albumartist · 12 new_album ·
|
||||
13 new_genre · 14 new_track · 15 changed`.
|
||||
Обязательный `assert (H["new_track"], H["changed"]) == (14, 15)`.
|
||||
|
||||
### 🔴 D11 — значения-СЕНТИНЕЛЫ в тегах: `99 / 51 / 46 / 117 / 238 / 236 / 204`
|
||||
|
||||
Теггеры и сайты пишут в поля не «пусто», а магические числа. План копирует их как данные:
|
||||
|
||||
| Значение | Смысл | Где найдено |
|
||||
|---|---|---|
|
||||
| `99`, `51`, `46` | «номера нет» (сентинел теггера) | все папки, одиночки |
|
||||
| `236` | счётчик скачанных файлов теггера **muzmo.ru** | `cur_album='[muzmo.ru]'`, 11 строк |
|
||||
| `204` | не-трек из имени (`204-Infected…`) | Infected Mushroom |
|
||||
| `238` | один номер на ВСЕ альбомы (Красная Плесень) | 56 строк, 5 альбомов |
|
||||
| `117` | один номер на 4 разные папки (Король и Шут) | 34 строки |
|
||||
|
||||
**Признак сентинела:** одно и то же крупное число у МНОГИХ файлов разных альбомов/папок.
|
||||
**Проверка:** `Counter(cur_track)` по папке; если одно значение >= 5 файлов и альбомы разные — мусор.
|
||||
**Правило:** сентинел → пусто; но **сначала** попробовать вытащить номер из имени файла.
|
||||
|
||||
### 🔴 D12 — мусорные значения `album` из тега: плейсхолдеры, годы, водяные знаки
|
||||
|
||||
План копирует `cur_album` **без фильтра**. Найдено и вычищено 20 строк (сессия 14):
|
||||
|
||||
| Значение | Тип |
|
||||
|---|---|
|
||||
| `Non spécifié`, `Non specifie` | плейсхолдер (франц. «не указано») |
|
||||
| `NULL`, `NoTitLe`, `no title`, `Album`, `New`, `mix` | плейсхолдер теггера/техпапка |
|
||||
| `Неизвестное название` (`Íåèçâåñòíîå…`) | тот же плейсхолдер в CP1251-битье |
|
||||
| `2005 `, `2007` | только-год |
|
||||
| `~melody.az - КняZz - Корсар~` | водяной знак сайта + склейка артист-трек |
|
||||
|
||||
**Целевое значение = имя корня артиста** (последний сегмент `folder`); если корень —
|
||||
категория (`!*`) или папка-мусорка (`misc`/`base`/`plux`/`старые`) → артист (сегмент
|
||||
после категории). `Pushnoy.ru` — сайт-источник: все подпапки (`2007`/`старые`/`NEW`)
|
||||
не альбомы → `Pushnoy.ru`.
|
||||
|
||||
**Скрипт:** `~/Downloads/music-tags/fix_junk_album.py` (dry-run по умолчанию, `--apply` пишет).
|
||||
**Верификация:** `verify_junk_album.py` — перечитывает файл, сверяет контрольные точки.
|
||||
|
||||
## 🔴 Классы порчи `albumartist` (сессия 7, 2026-09-27)
|
||||
|
||||
Три класса, найденных сплошным поиском по `APPLY-PLAN.csv`. Все три — из-за того, что правило
|
||||
|
||||
Reference in new issue
Block a user