--- title: Media Pipeline — Pitfalls & Debug Notes created: '2026-05-16' updated: '2026-05-16' type: entity tags: - media-pipeline - swift - pitfalls - debugging confidence: high --- # Media Pipeline — Pitfalls & Debug Notes Операционные заметки по Swift media-pipeline (media_files_db / media-toolbox) на Крякне. Связано: [[personal-os-architecture]], [[wiki/tech/kraken-infra]] ## §9.x Score Engine — Критические питфолы **§9.9 Year tiebreak:** - `if count > 1` only — НИКОГДА не штрафовать единственного кандидата - Если кандидат один — year mismatch не является причиной для снижения score **§9.6 Subset floor:** - Floor 0.35 когда queryToks ⊆ candidateToks (запрос является подмножеством кандидата) - Это нормально — не считать subset-матч за слабый результат **False resolves:** - Проверять поле `title:` — если в title шум из имени файла = `hasBestEffortResult` junk, не настоящий resolve - Пример: `2001 Космическая одиссея.mkv` → title: `2001 Космическая одиссея.mkv` = junk ## Транслитерация - `transliteratedToLatin` для кириллических названий генерирует мусорные запросы — TMDb не находит `Migratsiya` - **Решение:** не эмитить lat-запросы когда источник уже кириллица - `transliteratedToCyrillic` из латинских имён — полезен (`Osnovnoi` → `Основной Инстинкт` → TMDb находит) ## KP (Кинопоиск) Rate Limit - KP — настоящий fallback, дёргается только если TMDb не дал winner - 40 KP-запросов vs 8428 TMDb в типичном прогоне - Лимит исчерпывается только после очистки кеша когда весь TMDb идёт заново - Проблема не в архитектуре — это нормально ## Docker Deploy — Kraken (обязательный порядок) После каждого деплоя **обязательно** чистить dangling images, иначе диск забивается (~1-2GB за прогон): ```bash # Mac (после docker build) docker image prune -f # Kraken (после docker load) ssh kraken-ssh "docker image prune -f" ``` Полная последовательность деплоя: ```bash # 1. Собрать docker build -f Dockerfile.kraken -t media-pipeline:kraken . # 2. Перенести docker save media-pipeline:kraken -o /tmp/mp.tar scp /tmp/mp.tar kraken-ssh:/tmp/ ssh kraken-ssh "docker load -i /tmp/mp.tar && rm /tmp/mp.tar && docker image prune -f" rm /tmp/mp.tar # 3. Почистить локально docker image prune -f ``` ## Docker Run — Kraken Всегда монтировать `unresolved.json` явно: ```bash docker run \ -v "$(pwd)/config.json:/config/config.json:ro" \ -v "/media:/media" \ -v "$(pwd)/cache:/cache" \ -v "$(pwd)/unresolved.json:/config/unresolved.json" \ media-pipeline ``` Без явного маунта `unresolved.json` пишется внутри контейнера и теряется. ## Пофикшенные баги (сессии 2026-05) - `Code=516 EEXIST` в ApplyPhase — исправлен - Episode regex `\b` boundary — исправлен - BBC prefix strip + trim — исправлен - Yoficator Linux path — исправлен - Backtick в TitleParser (`/[^'\p{L}\p{N}]+/` → strip apostrophes first) — исправлен - §9.6 subset floor 0.35 — добавлен - §9.9 year tiebreak `count>1` only — исправлен - Year-miss retry в TMDb/KP providers — добавлен ## Связанные заметки - [[personal-os-architecture]] - [[wiki/tech/kraken-infra]]