[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
@@ -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`
|
||||
|
||||
Reference in new issue
Block a user