[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:
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
|
**К правке:** 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 спросил: «Ты прошёл вручную через весь список
|
> **⚠️ 22-я волна (2026-09-26): CSV НЕ ГОТОВ.** Alex спросил: «Ты прошёл вручную через весь список
|
||||||
> и АБСОЛЮТНО всё корректно? Нет дублей с разным написанием?» — честный ответ был **НЕТ**. Проверка
|
> и АБСОЛЮТНО всё корректно? Нет дублей с разным написанием?» — честный ответ был **НЕТ**. Проверка
|
||||||
> нашла ещё ~900 дефектных строк сверх «зелёных» чекеров.
|
> нашла ещё ~900 дефектных строк сверх «зелёных» чекеров.
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ created: '2026-09-26'
|
|||||||
updated: '2026-09-26'
|
updated: '2026-09-26'
|
||||||
type: tech
|
type: tech
|
||||||
namespace: personal
|
namespace: personal
|
||||||
wave: 22
|
wave: 23
|
||||||
tags:
|
tags:
|
||||||
- music
|
- music
|
||||||
- jellyfin
|
- jellyfin
|
||||||
@@ -20,8 +20,31 @@ related:
|
|||||||
|
|
||||||
# Music Tags Repair — TrueNAS (7906 файлов)
|
# 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. Поймано триггером
|
> ✅ **НОВОЕ (22-я волна) — ДЕДУП АРТИСТОВ + АРТИСТ В TITLE + case в album. Поймано триггером
|
||||||
> Alex: «Ты прошел вручную через весь список и абсолютно все выглядит корректно??? Нет дублей
|
> Alex: «Ты прошел вручную через весь список и абсолютно все выглядит корректно??? Нет дублей
|
||||||
> с разным написанием?» — ответ был НЕТ, и проверка нашла ещё ~900 дефектных строк.**
|
> с разным написанием?» — ответ был НЕТ, и проверка нашла ещё ~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`:**
|
> ✅ **НОВОЕ (21-я волна) — блок `Pushnoy.ru`/`Александр Пушной` + `Infected Mushroom`:**
|
||||||
> - `Pushnoy-ru_` в title — это НЕ сайт-вода, а **префикс-пространство имён файлов** (транслит
|
> - `Pushnoy-ru_` в title — это НЕ сайт-вода, а **префикс-пространство имён файлов** (транслит
|
||||||
> имени файла); артист везде `Александр Пушной`. `Pushnoy.ru`/`Pushnoy-ru` в `cur_artist`
|
> имени файла); артист везде `Александр Пушной`. `Pushnoy.ru`/`Pushnoy-ru` в `cur_artist`
|
||||||
|
|||||||
Reference in new issue
Block a user