[2026-09-27] eagle: personal/plans/music-artist-albumartist-repair.md personal/tech/kraken-host-resource-limits.md personal/tech/music-tags-repair-truenas.md

This commit is contained in:
Alexey Martemyanov committed 2026-09-27 11:47:24 +06:00
1 parent 36446fb12b
commit 3ad74fbe75
3 files changed
+141 -14

No files matched your search

@@ -11,6 +11,8 @@ tags:
- albumartist
- repair
- truenas
- compilation
- mojibake
related:
- '[[family/plans/music-jellyfin-lidarr-taiga]]'
- '[[personal/tech/music-tags-repair-truenas]]'
@@ -257,30 +259,111 @@ def decode_mojibake(s):
ffprobe может **показать** `album_artist`, которого в байтах `TPE2` **нет**
(читает из ID3v1-хвоста или TXXX). Проверять наличие `TPE2` — только `od` по байтам.
## ✅ ЭТАП ЗАВЕРШЁН: `fix-plan-FINAL.csv` (7861 строка, 0 пустых)
Построен итоговый построчный план правок. **Файлы музыки НЕ тронуты** — ждёт проверки Alex
и отдельного «go».
**Колонки:** `path, class, cur_title, cur_artist, cur_album, cur_albumartist,`
`new_artist, new_albumartist, new_album, changed`
```
строк: 7861
изменений (changed): 7233
NEED_LOOKUP: 0
пустых new_artist: 0
```
**Распределение `new_albumartist`:**
```
1518 Various Artists ← сборники (!Radio, !Retro, НТЛ, Eminem, Sbornik_Novij_Rok…)
322 Детские песни ← !Детские/*
248 Сказки ← !Детские/Сказки
284 Владимир Высоцкий ← НЕ сборник: albumartist = artist
```
### Разбивка 633 папок по группам (метод, который сработал)
| Группа | Критерий | Папок | Решение |
|---|---|---:|---|
| **A** | 1 уникальный артист | 540 | АЛЬБОМ → `albumartist` = artist |
| **B** | 2–5 артистов | 44 | **ручная разметка** → `list4-groupB.md` |
| **C** | 6+ артистов | 49 | СБОРНИК → `Various Artists` |
**Группа B — главный питфолл.** Из 44 папок только **11 СБОРНИКИ**, остальные **33 — АЛЬБОМЫ
с фитами** (`Benassi Bros`, `Savant/*`, `Любэ`, `Король и Шут`, `Муммий Тролль`, `Аквариум`).
Механический критерий «>1 артиста = сборник» здесь даёт ложные `Various Artists`.
### Как решались `artist` (178 пустых → 0)
| Источник | Найдено |
|---|---:|
| Композитор из **скобок** в имени файла | 57 |
| Поиск в интернете (Википедия, soundtimes.ru) | 43 + 27 + 19 = 89 |
| Народные/безавторские → `Детские песни` | 22 + 9 = 31 |
| Близнец-файл (`Двойка` = Б. Шнапер) | 1 |
**Формат «автор в имени файла»** (`9. Чебурашка В.Шаинский - Э.Успенский.mp3`) —
композитор до дефиса. Экстрактор должен терпеть: строчные инициалы (`е. Крылатов`),
опечатки (`Петр Чойковский` → `Пётр Чайковский`, `В. Шиинский`), без точек (`Ю Чичков`),
`И, Ефремов` (запятая вместо точки).
**Сказки-аудио:** авторы — не композиторы, а литераторы: `Теремок` = Русская народная сказка,
`Золотой петушок` = Александр Пушкин, `Серебряное копытце` = Павел Бажов,
`Маленький Мук` = Вильгельм Гауф.
### Классы папок (`folders-plan.csv`)
```
АЛЬБОМ: 492 СБОРНИК: 63
СКАЗКИ: 36 ДЕТСКИЕ-СБОРНИК: 9
АЛЬБОМ-мульти(?): 30 ДЕТСКИЕ: 2
ПУСТО-АРТИСТ: 1
```
`АЛЬБОМ-мульти(?)` (30 папок) разобраны вручную — почти все НЕ сборники, а альбомы с фитами.
## ⏭ СЛЕДУЮЩИЕ ШАГИ
1. **Завершить ручную разбивку по группам** — оставшиеся корневые папки:
`!Rock&Folk`, `!Барды`, `!Рэп`, `!Классика`, `z Другое…`, `!Pop, Club, Любэ` (без `!Radio`),
`!Retro`, `!Детские`
2. **Показать списки Alex на проверку**
3. Скрипт обновляет `tag-inventory3.csv` → финальные колонки `fix_artist`, `fix_albumartist`, `fix_album`
4. Поиск артистов в интернете — только для строк, где нет скобок и не мойибаке
5. **Только после «go»** — правка файлов (с бэкапом, с пост-сверкой)
1. **Alex проверяет `fix-plan-FINAL.csv`** — три выборки: 57 строк «из скобок»,
1518 строк `Various Artists`, 248 строк `Сказки`
2. **Скрипт-писатель `apply_tags.py` — написать заново** (старый не годен, см. §Разбор):
- `delall` — **вне** `if`, `add` — только при непустом значении
- **+`TPE2`** (`albumartist`) в `_frames()`
- декодер мойибаке CP1251→UTF-8
- фильтр `.mp3` — **обязателен** (иначе `ID3()` поверх не-MP3 → нет `moov atom`, непоправимо)
- `save(path, v2_version=3)` **в тот же путь**, не в `.tmp` через `ID3(path)`
3. **Сухой прогон на 20 файлах** + пост-сверка (прочитать тег ПОСЛЕ, сравнить с ожиданием)
4. **Только после «go»** — массовая правка с бэкапом
## 📁 ФАЙЛЫ РАБОТЫ (Mac)
```
/Users/admin/milestones/music-csv-2026-09-26/
├── fix-plan-FINAL.csv ⭐ 7861 стр, ИТОГОВЫЙ план правок
├── fix-plan-final.csv промежуточный (NEED_LOOKUP=121)
├── fix-plan-final2/3/4.csv промежуточные после каждой волны lookup
├── raw_tags_full.tsv 7861 стр, сырые теги (md5 0c3647fa...)
├── tag-inventory3.csv 7861 стр, 13 колонок, +albumartist
├── tag-inventory2.csv.bak-20260927 бэкап
├── tag-fix-plan.csv.bak-20260927 бэкап
├── albumartist-plan.csv черновик (НЕ финал — см. §Процессный запрет)
├── folders-plan.csv 633 папки: класс + предложенный albumartist/album
├── mojibake_rows.tsv 492 строки с мойибаке
├── verify-problems.csv 12 строк без albumartist
├── folder-categories.csv 633 папки с категориями
├── list2-folders.txt 633 папки (файлы/артисты)
├── list3-radio.md ручная разметка !Radio (31 папка)
├── analyze.py / build_inventory3.py / verify_manual.py / audit_categories.py
└── README.md, MD5SUMS.txt
├── list3-radio.md ручная разметка !Radio (31 папка, 19 сборников)
├── list4-groupB.md ручная разметка группы B (44 папки, 11 сборников)
├── need-lookup.txt / lookup-still.txt списки на поиск в интернете
└── *.py analyze / build_inventory3 / build_folders_plan /
build_fix_plan / resolve_composers / apply_lookup1-3 /
build_final / verify_manual / audit_categories
```
### Питфолл: субагент пишет в корень vault
Субагент по поиску композиторов создал `Советские детские песни — композиторы.md`
**в корне vault** (не в `personal/`). Содержимое перенесено в рабочую логику, файл удалён.
**В задание субагенту явно писать: файлов не создавать, вернуть результат текстом.**