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

This commit is contained in:
Alexey Martemyanov committed 2026-09-26 19:51:03 +06:00
1 parent b368c6e115
commit b290eec03b
2 files changed
+78 -3

No files matched your search

@@ -11,6 +11,21 @@ updated: '2026-09-26'
**К правке:** 6773 файлов · **без изменений:** 1133
> **⚠️ 23-я волна (2026-09-26): CSV обработан глубже, но всё ещё НЕ ГОТОВ к применению.**
> Добито то, что предыдущая волна оставила как «осталось»:
> - **`album` = `ГГГГ - Название`** (`2002 - Живой`, `1989 - Сектор Газа`) — **504 строки**, год снят
> скриптом `strip_year_album.py`.
> - **Плейсхолдеры в `album`**: `2007` (10), `NEW (Remix Album)` (15, Eminem/50cent),
> `Unreleased_Tracks`/`Unreleased`/`old - unreleased` (4) → пусто либо `Unreleased Tracks`.
> - **Потерянный умляут** `Nö`→`Nц` в Knorkator (3 строки), **обрезанные title**
> (`Dust Brothers Who is Tyler Du`), **имя файла в title** (`cat_hous.mp3`→`Кошкин дом`,
> `RacinG_Portal`, `DJ Times Shortlist-SAT-18-11-2009`).
>
> **⏭ Осталось до «go»:** title у **~7000 строк прочих исполнителей глазами НЕ проходился**
> (детекторы ловят обрезки/дубли, смысловые ошибки — нет); `ty_49` (`!Radio/y OOF/пакет.mp3`,
> artist `1club`) — не определить без прослушивания; 46 альбомов после снятия года с треклистами
> не сверялись. Детали и детекторы — [[personal/tech/music-tags-repair-truenas|tech/music-tags-repair-truenas]], 23-я волна.
> **⚠️ 22-я волна (2026-09-26): CSV НЕ ГОТОВ.** Alex спросил: «Ты прошёл вручную через весь список
> и АБСОЛЮТНО всё корректно? Нет дублей с разным написанием?» — честный ответ был **НЕТ**. Проверка
> нашла ещё ~900 дефектных строк сверх «зелёных» чекеров.
+63 -3
View File
@@ -4,7 +4,7 @@ created: '2026-09-26'
updated: '2026-09-26'
type: tech
namespace: personal
wave: 22
wave: 23
tags:
- music
- jellyfin
@@ -20,8 +20,31 @@ related:
# Music Tags Repair — TrueNAS (7906 файлов)
> **Статус: ДВАДЦАТЬ ВТОРАЯ ВОЛНА (2026-09-26). CSV: 7906 строк, 0 БИТЫХ, 0 ДУБЛЕЙ АРТИСТОВ.
> НЕ ГОТОВ к применению — остались неразобранные классы (см. «ОСТАЛОСЬ»).**
> **Статус: ДВАДЦАТЬ ТРЕТЬЯ ВОЛНА (2026-09-26). CSV: 7906 строк, 0 БИТЫХ, 0 ДУБЛЕЙ АРТИСТОВ,
> 0 год-префиксов в album, 0 плейсхолдеров в album, 0 сайтов-воды.**
> НЕ ГОТОВ к применению: **title у ~7000 строк НЕ проходился глазами** (детекторы смысловые
> ошибки не ловят), `ty_49`/`пакет.mp3` не определены без прослушивания, 46 альбомов не сверены
> с официальными треклистами. См. «ОСТАЛОСЬ» ниже.
> ✅ **НОВОЕ (23-я волна) — год-префикс в album + плейсхолдеры + обрезки + умляуты:**
> | Класс | Строк | Скрипт/метод | Результат |
> |---|---|---|---|
> | `album` = `ГГГГ - Название` (`2002 - Живой`) | **504** (46 уник.) | `strip_year_album.py` | год снят → `Живой` |
> | `album` = `ГГГГ` (год) — Pushnoy `2007/` | 10 | `fix_placeholders.py` | → пусто |
> | `album` = `NEW (Remix Album)` (Eminem/50cent) | 15 | тот же | → пусто |
> | `album` = `Unreleased_Tracks`/`Unreleased`/`old - unreleased`/`...CD R` | 4 | `fix_unreleased.py` | → `Unreleased Tracks` |
> | Потерянный умляут `Nö`→`Nц` (Knorkator `03. Nö`, `04. From Nö Till`, `02. From Du Nich Till Nö`) | 3 | вручную `patch` | → `Nö` |
> | Обрезанный title (`Dust Brothers Who is Tyler Du`, `SLIMHOUSE vol.5 - mixed by`, `Come Along Noew (feat. Phoebus`) | 4 | вручную | исправлено |
> | Имя файла в title (`cat_hous.mp3`(→`Кошкин дом`), `ty_49`, `RacinG_Portal`(→`RacinG Portal`), `DJ Times Shortlist-SAT-18-11-2009`(→`DJ Times Shortlist`)) | 5 | вручную | исправлено |
> | `trapped (hi_tack remix)` → `Trapped (Hi_Tack Remix)` | 1 | вручную | исправлено |
> | `Infected Mushroom Vs. The Prodigy` → `Infected Mushroom vs. The Prodigy` | 1 | вручную | исправлено |
>
> ⏭ **ОСТАЛОСЬ на конец 23-й волны (НЕ трогать без проверки):**
> - **title ~7000 строк прочих исполнителей глазами НЕ проходился.** Детекторами ловятся только
> обрезки/дубли/расширения/транслит; смысловые ошибки («трек назван не тем треком») — НЕТ.
> - `ty_49` в `!Radio/y OOF/пакет.mp3` (artist `1club`) — **не определить без прослушивания.**
> - 46 уникальных альбомов после снятия года — **с официальными треклистами НЕ сверялись.**
> - 138 строк `album == artist` — БОЛЬШИНСТВО ЛЕГИТИМНЫ (одноимённые альбомы) — не трогать.
>
> ✅ **НОВОЕ (22-я волна) — ДЕДУП АРТИСТОВ + АРТИСТ В TITLE + case в album. Поймано триггером
> Alex: «Ты прошел вручную через весь список и абсолютно все выглядит корректно??? Нет дублей
> с разным написанием?» — ответ был НЕТ, и проверка нашла ещё ~900 дефектных строк.**
@@ -91,6 +114,43 @@ related:
>
> ---
>
> 🛠 **НОВЫЕ СКРИПТЫ 23-й волны (все по безопасной схеме tmp + валидация + `os.replace`):**
> - `strip_year_album.py` — снимает `ГГГГ - ` с начала `new_album` + вырезает дублирующийся
> артист-префикс внутри album. 504 строки.
> - `fix_placeholders.py` — карта `DROP`: `2007`/`2005`/`NEW (Remix Album)`/`DJ Times Shortlist-SAT-18-11`
> → пусто; `Unreleased_Tracks` → `Unreleased Tracks`.
> - `fix_unreleased.py` — карта `MAP`: `Unreleased Tracks CD R`/`old - unreleased`/`Unreleased`
> → `Unreleased Tracks`.
> - `rebuild_summaries.py` — пересборка `artists-single-track.csv` (3222) +
> `artists-multi-track.csv` (4669) = 7891 (делит по признаку непустого `new_track`, фильтрует
> `action=skip` + `source=dropped`).
>
> 📎 **Детекторы 23-й волны (read-only, гонять ПЕРЕД заявлением «готово»)** — то, что нашли
> год-префиксы, плейсхолдеры, обрезки и умляуты:
> ```bash
> cd ~/Downloads/music-tags && python3 - <<'EOF'
> import csv, re
> rows=list(csv.DictReader(open('tag-fix-plan.csv',encoding='utf-8-sig',newline='')))
> # A. album = чистый год
> print("year-only:", [i for i,r in enumerate(rows,2) if re.fullmatch(r'(19|20)\d\d',(r['new_album'] or '').strip())])
> # B. album = "ГГГГ - Название"
> print("year-prefix:", sum(1 for r in rows if re.match(r'^(19|20)\d\d\s*[-–—]',(r['new_album'] or '').strip())))
> # C. плейсхолдеры в album
> PL={'NEW (Remix Album)','Unreleased_Tracks','DJ Times Shortlist-SAT-18-11','misc','new'}
> print("placeholders:", sum(1 for r in rows if (r['new_album'] or '').strip() in PL))
> # D. title = имя файла / расширение
> print("file-title:", [i for i,r in enumerate(rows,2) if re.search(r'\.(mp3|m4a|flac)$',(r['new_title'] or '').strip(),re.I)])
> # E. потерянный умляут: латиница+ц+латиница / одинокое "Nц"
> print("umlaut:", [i for i,r in enumerate(rows,2) if re.search(r'[A-Za-z][ц][A-Za-z]|\bNц\b',(r['new_title'] or ''))])
> # F. обрезанный title: незакрытая "(" или висящий "&"/"-"
> print("truncated:", [i for i,r in enumerate(rows,2) if (r['new_title'] or '').count('(')!=(r['new_title'] or '').count(')')])
> EOF
> ```
> **Бэкапы 23-й волны:** `bak-<HHMMSS>-year`, `bak-<HHMMSS>-ph`, `bak-<HHMMSS>-unrel`,
> `bak-<HHMMSS>-albumfix`, `bak-<HHMMSS>-prefix2` в `~/Downloads/music-tags/`.
>
> ---
>
> ✅ **НОВОЕ (21-я волна) — блок `Pushnoy.ru`/`Александр Пушной` + `Infected Mushroom`:**
> - `Pushnoy-ru_` в title — это НЕ сайт-вода, а **префикс-пространство имён файлов** (транслит
> имени файла); артист везде `Александр Пушной`. `Pushnoy.ru`/`Pushnoy-ru` в `cur_artist`