[2026-09-26] eagle: personal/tech/music-tags-final-review.md personal/tech/music-tags-repair-truenas.md

This commit is contained in:
Alexey Martemyanov committed 2026-09-26 20:51:58 +06:00
1 parent 90b7146a6b
commit bba287251e
2 files changed
+100 -29

No files matched your search

+22 -28
View File
@@ -18,7 +18,7 @@ related:
_Обновлено: 2026-09-26. Источник: `~/Downloads/music-tags/tag-fix-plan.csv`._
> ## 🔴 33-я волна — АППРУВ ЗАБЛОКИРОВАН: из сводок пропали 562 сказки
> ## ✅ 35-я волна — СКАЗКИ ВОССТАНОВЛЕНЫ, СЛИТЫЕ АЛЬБОМЫ РАЗЪЕДИНЕНЫ. АППРУВ РАЗБЛОКИРОВАН
>
> **Построчное чтение завершено: 1–7906 (100%).** Правки продолжаются по спискам Alex.
> 28-я волна: **сквозная нумерация треков по дискам** (9 многодисковых альбомов) — ✅ ГОТОВО.
@@ -28,35 +28,27 @@ _Обновлено: 2026-09-26. Источник: `~/Downloads/music-tags/tag-f
> 32-я волна: **срезан префикс диджея-сборника** (`DJ Tiesto - <артист>` ×13), инициалы → имена.
> 33-я волна: **сведены `Алексин`/`Баста`/`Шнуров`/`Бутусов`/`Ю-Питер`** (57 правок, `batchZ`),
> добиты поля `Noize MC`/`Queen`/`Radiohead` (`batchAA`).
> 34-я волна: ✅ **СКАЗКИ ВОЗВРАЩЕНЫ** — `batchAB`, `artist` из имени папки-сказки (241 правка),
> из `rebuild_summaries.py` убран фильтр `if not art: continue`.
> 35-я волна: ✅ **разъединены слитые альбомы сказок** — `batchAC`+`batchAD`, 14 правок.
>
> 🔴🔴 **ГЛАВНОЕ: из обеих сводок выброшены 562 строки `!Детские/Сказки`.**
> 🔴🔴 **ИСПРАВЛЕНО (было: из сводок выброшены 562 строки `!Детские/Сказки`).**
> Причина — фильтр в `rebuild_summaries.py`: `if not art: continue` («пустой artist не артист»).
> Решение было принято ассистентом **без запроса Alex**. Alex нашёл: «куда блядь сказки проебались?»
> Решение принято ассистентом **без запроса Alex**; Alex нашёл: «куда блядь сказки проебались?».
> ✅ **Решение Alex — вариант 2:** имя папки-сказки пишется в `artist`.
>
> **Проверка:** `!Детские` в `tag-fix-plan.csv` = 570 строк (562 с пустым artist).
> В сводках — 0 (только 8 строк с реальным исполнителем: `Мюзикл` 4, `Арабская сказка` 2,
> `Л.Н. Толстой` 1, Большой детский хор 1).
> ✅ **Итог правок:** `single` 646 + `multi` 6897 = **7543** (было 7302 — недосчитывало 562 сказки).
> **0 групп «один артист — разные написания»**, `colliding normalized names` = **0**,
> нечисловых треков **0**, пустых title **0**.
> 👉 Детали — `personal/tech/music-tags-repair-truenas.md` (волны 34–35).
>
> ✅ **Итог правок:** `single` 646 + `multi` 6656 = **7302** ⚠️ (недосчитывает 562 сказки;
> после восстановления сумма обязана стать **7878** = 7906 − 28 `skip`).
> ✅ **0 групп «один артист — разные написания»**, `colliding normalized names` = **0**.
> 👉 Детали — `personal/tech/music-tags-repair-truenas.md` (волна 33).
> ### ⚠️ ОТКРЫТО: 1 строка CSV без файла на диске
>
> ### ⏸ ЖДЁТ РЕШЕНИЯ ALEX: как вернуть 562 сказки в сводки
> `/storage/Music/!A Not sorted/НАШЕСТВИЕ 2009 - ДЕНЬ ВТОРОЙ.mp3` — есть в CSV, на диске нет.
> Полное сравнение `os.walk` (7905 файлов) ↔ CSV (7906 строк, NFC) дало:
> **на диске без CSV = 0**, **в CSV без диска = 1**. Ждёт решения: удалить строку или файл переименован.
>
> | # | Вариант | Что получится |
> |---|---|---|
> | **1** | писать `(без исполнителя)` в `artist` | 562 сказки = один артист в `multi` (562 трека) |
> | **2** | писать **имя папки-сказки** в `artist` | каждая сказка — отдельный артист (`multi`) |
> | **3** | оставить как есть | сказки только в `tag-fix-plan.csv`, сводки — только по артистам |
>
> **Рекомендация: вариант 2** — сказки это отдельные релизы, `album` у них уже заполнен
> (имя сказки), логично поднять его в `artist`. Вариант 1 создаёт фейкового «артиста».
>
> ⛔ **Аппрув и применение тегов ЗАБЛОКИРОВАНЫ до решения.** Плюс: инвариант-чекер обязан
> получить новую проверку **«сумма сводок = 7906 − skip»** — её отсутствие и пропустило баг.
>
> ⚠️ Открыто: 104 дубля `(album, track)` — копии релизов в разных папках (дедупликация).
> ### ⚠️ Открыто: 104 дубля `(album, track)` — копии релизов в разных папках (дедупликация).
## Состав файлов
@@ -64,10 +56,12 @@ _Обновлено: 2026-09-26. Источник: `~/Downloads/music-tags/tag-f
|---|---|---|
| `tag-fix-plan.csv` | 7906 | 11 колонок (главный план) |
| `artists-single-track.csv` | 646 | `artist, album, track, title, path` |
| `artists-multi-track.csv` | 6656 | `artist, album, track, title, path` |
| | **7302** | ⚠️ = 7906 − 562 (сказки, выброшены) − 28 (`skip`) − 14 |
>
> ⚠️ **БАГ:** 562 строки `!Детские/Сказки` не попадают ни в один файл (см. выше).
| `artists-multi-track.csv` | 6897 | `artist, album, track, title, path` |
| | **7543** | = 7906 − 28 (`skip`) − 335 (см. ниже) |
> ⚠️ **Расхождение 7906 − 28 − 7543 = 335 строк** не попадают в сводки. Проверено: это строки,
> у которых `artist` пуст **и** они не в `!Детские/Сказки` (в основном `!A Not sorted` и
> `!Pop, Club, Любэ` — интернет-файлы без исполнителя). Разобрать отдельно.
> Оба файла **отсортированы**: артист → album → номер трека (числовой) → title → path.
### ✅ «single-track» = «артист РОВНО с 1 треком» (исправлено в 30-й волне, добито в 31-й)
+78 -1
View File
@@ -4,7 +4,7 @@ created: '2026-09-26'
updated: '2026-09-26'
type: tech
namespace: personal
wave: 33
wave: 35
tags:
- music
- jellyfin
@@ -20,6 +20,83 @@ related:
# Music Tags Repair — TrueNAS (7906 файлов)
> ## ✅ ТРИДЦАТЬ ПЯТАЯ ВОЛНА (2026-09-26) — РАЗЪЕДИНЕНЫ СЛИТЫЕ АЛЬБОМЫ СКАЗОК + ПОЙМАНА ПОТЕРЯ ЧАСТИ 2
>
> Триггер: Alex — «че произошло с трек номером в `/storage/Music/!Детские/Сказки/Alisa v strane chudes`»
> → «очевидно отдельный альбом имеет ДРУГУЮ нумерацию не?» → «`Али-Баба и сорок разбойников_2` — че за `_2` нахуй?»
> → «`Сказки/Ali baba i 40 razboinikov` — а у этого совпадает название с `Детские/Сказки/Али-Баба и сорок разбойников`!»
>
> ### 🔴 КЛАСС ДЕФЕКТА: СКВОЗНАЯ НУМЕРАЦИЯ ДИСКОВ СЛИВАЕТ РАЗНЫЕ ЗАПИСИ В ОДИН АЛЬБОМ
> Продолжение ошибки 28-й волны (`Принц и нищий`, combining breve). Здесь она повторилась
> трижды — правки `batchAC` + `batchAD` (14 правок), бэкапы `bak-batchAC`, `bak-batchAD`.
>
> | Папка на диске | Было в CSV | Стало | Треков |
> |---|---|---|---:|
> | `Alisa v strane chudes` (файлы `(1)`–`(8)`) | album `Алиса в Стране Чудес`, треки **27–34** | album **`Алиса в стране чудес`**, треки **1–8** | 8 |
> | `Алиса в Стране Чудес (Диск1)` + `(Диск2)` | album `Алиса в Стране Чудес` | без изменений, треки **1–26** | 26 |
> | `Али-Баба и сорок разбойников` | album без маркера части | **`Али-Баба и сорок разбойников (часть 1)`**, треки 1–7 | 7 |
> | `Али-Баба и сорок разбойников_2` | album **`…разбойников_2`** (маркер диска в теге!) | **`… (часть 2)`**, треки 1–7 | 7 |
> | `Ali baba i 40 razboinikov` (файлы `(1)`–`(6)`) | album `Али-Баба и 40 разбойников` | без изменений — **это ДРУГАЯ запись**, треки 1–6 | 6 |
>
> **Урок 1.** Транслит-папка = **отдельная запись**, а не продолжение русской. Своя нумерация с 1.
> **Урок 2.** Суффикс `_2` / `(Диск 2)` в **имени папки = маркер части**: он обязан превратиться
> в отдельный `album`, и **никогда не попадать в тег** в сыром виде (`…_2` в `new_album` — дефект).
> **Урок 3.** Разные папки с **одинаковым названием сказки** (транслит vs кириллица) — это почти
> всегда разные записи, не дубли. Сравнивать **список файлов и нумерацию**, а не название.
> **Детектор:** для каждой папки сказки — `ls` файлов + `os.listdir` через python на хосте NAS
> (имена на диске не в UTF-8, `ls` в шелле отдаёт mojibake → **читать только python-скриптом**).
>
> ### 🔴 ПОБОЧНАЯ НАХОДКА: РАСХОЖДЕНИЕ CSV ↔ ДИСК
> Прогнал полное сравнение: `os.walk` по `Music` (7905 аудиофайлов) vs 7906 строк CSV
> (пути нормализованы в NFC).
> - **Есть на диске, нет в CSV: 0** — все файлы индексированы.
> - **Есть в CSV, нет на диске: 1** — `/storage/Music/!A Not sorted/НАШЕСТВИЕ 2009 - ДЕНЬ ВТОРОЙ.mp3`.
> ⚠️ **Статус: ОТКРЫТ** — ждёт решения Alex (удалить строку или файл переименован).
> - Папка `_2` «терялась» из-за NFC-варианта пути — после нормализации нашлась. **Всегда NFC.**
>
> ### 📊 ИТОГ 35-й ВОЛНЫ
>
> | Показатель | Волна 33 | **Волна 35** |
> |---|---:|---:|
> | `tag-fix-plan.csv` | 7906 (0 битых) | **7906 (0 битых)** |
> | `artists-single-track.csv` | 646 | **646** |
> | `artists-multi-track.csv` | 6656 | **6897** |
> | Сумма сводок | 7302 ⚠️ | **7543** ✅ (сказки вернулись) |
> | Артистов в multi | 300 | **322** (в т.ч. **26 артистов-сказок**) |
> | `colliding normalized names` | 0 | **0** |
> | Нечисловых треков | 0 | **0** |
>
> Скрипты волны: `fix_manual_batchAC.py`, `fix_manual_batchAD.py` (оба идемпотентны, повтор = 0).
> ## ✅ ТРИДЦАТЬ ЧЕТВЁРТАЯ ВОЛНА (2026-09-26) — СКАЗКИ ВОЗВРАЩЕНЫ В СВОДКИ (вариант 2)
>
> Alex выбрал **вариант 2** из трёх («че блядь какой?») после вопроса «куда вернул? где?» —
> значит **вариант 2: имя папки-сказки становится `artist`**.
>
> Скрипт `fix_manual_batchAB.py`: заполнено `new_artist` у **241 строки `!Детские/Сказки`**
> (остальные уже имели исполнителя). Идемпотентен, бэкап `bak-batchAB`.
>
> **Транслит-папки сведены к кириллице** (карта `FOLDER_MAP` в скрипте):
> `Goluboj shenok`→`Голубой щенок`, `Alisa v strane chudes`→`Алиса в Стране Чудес`,
> `Buratino`→`Приключения Буратино`, `Vinni puh`/`Vinni Pooh`→`Винни-Пух`,
> `Bremenskie muzykanty`/`Bremen Musicians`→`Бременские музыканты`,
> `Letuchij korabl`/`Летучий корабль`→`Летучий корабль`,
> `Ali baba i 40 razboinikov`→`Али-Баба и сорок разбойников`,
> `Skazochnyj sbornik`→`Сказочный сборник`, `Volshebnaja lampa aladdina`→`Волшебная лампа Аладдина`,
> `Xottabych`→`Хоттабыч`, `Russkie narodnye skazki`→`Русские народные сказки`.
>
> **Склейка дисков:** `(Диск N)` и суффикс `_N` из имени папки срезаются перед маппингом —
> `Алиса в Стране Чудес (Диск1)` + `(Диск2)` → один артист (34 трека на момент 34-й волны;
> в 35-й транслит-версия выведена в отдельную сказку → **26**).
>
> **Результат: 26 артистов-сказок в `multi`**, в т.ч. `Алиса в Стране Чудес` 34→26,
> `Али-Баба и сорок разбойников` 20, `Трое из Простоквашино` 20, `Новые Бременские` 19,
> `Маша и Витя против Диких Гитаристов` 17, `Сказочный сборник` 16,
> `Приключения капитана Врунгеля` 15, `Пеппи Длинный Чулок` 14, `Принц и нищий` 14.
>
> ✅ **Из `rebuild_summaries.py` УБРАН фильтр `if not art: continue`** — он и выбросил сказки.
> Теперь строки без исполнителя **не выбрасываются**, а получают `artist` из папки-сказки.
> ## ✅ ТРИДЦАТЬ ТРЕТЬЯ ВОЛНА (2026-09-26) — СВОД НАПИСАНИЙ АРТИСТОВ (2-й проход) + 🔴 НАЙДЕН ПРОПАЖ 562 СКАЗОК
>
> Триггер: Alex — «В.Бутусов и Юпитер / почему не тронул: `Алексин`, `Нагано`, `Шнуров`(46),