36 Commits
Author SHA1 Message Date
DenozordecandClaude Opus 5.5 dc19fe6255 API: видео, тип релиза и субтитры в ответе релиза; Atmos и kHz у дорожек
docker / build (push) Successful in 1m18s
src/techinfo.py — правила по строкам «Видео:», «Тип релиза:»/«Качество»,
«Контейнер:», «Продолжительность:», «Субтитры:» и заголовку: поля video
(кодек, размер кадра, класс разрешения, fps, битрейт, битность, HDR,
профиль DV), release (тип, нормализованный источник, контейнер,
продолжительность), subtitles (языки с forced/full/SDH, формат, вшитые).
audio дорожек и original: khz и atmos (вход модели не меняется).
title_from_html больше не рвёт заголовок rutracker пробелами
(<span>/<wbr> на каждом слове). Покрытие на 600 страницах каждого
трекера: видео 90/93/100%, e2e озвучки без изменений. Тесты 275 ok.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-02 22:26:57 +07:00
DenozordecandClaude Opus 5.5 89ffe4375b Документация: кодек-строки, аудит дорожек, текущие метрики
docker / build (push) Successful in 39s
README: метрики модели 02.11.2026 (test 4 377 строк, e2e по трекерам), размер
датасета, kinozal-вкладки. dataset.md: размер снимка, колонки studio_source и
audio_raw. architecture.md: кодек-строки как позитивы сегментатора, E2E_MODEL.
collecting.md: tools/audit_tracks.py. training-windows.md: доразметка, сравнение
кандидата и постановка в models/best и Docker. plan.md: шаг «аудит дорожек».

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-02 21:55:43 +07:00
DenozordecandClaude Opus 5.5 588b1f1579 Модель для Docker: base, обученная со студиями из кодек-строк
docker / build (push) Successful in 4m43s
models/runs/20261102_190555_basecodec -> models/best -> docker-models
(tools/pack_models.py --stage). Тестовая выборка (4 377 строк): joint
exact 0.891 -> 0.906, span exact 0.905 -> 0.922, type macro F1 0.893 ->
0.903; исправлено 244 строки, сломано 179 (p = 0.002). Релизы (по 400
страниц, P/R): kinozal 0.745/0.850 -> 0.766/0.879, rutracker 0.866/0.859
-> 0.877/0.870, nnm 0.845/0.829 -> 0.838/0.825. Сегментатор прежний.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-02 20:30:54 +07:00
DenozordecandClaude Opus 5.5 e3af778068 Студии из кодек-строк: codec_line_rows, доразметка, аудит дорожек
tools/audit_tracks.py и reports/tracks_audit.md — аудит всех дорожек
техданных по data/raw с планом. Пункт 1 плана: harvest_core.codec_line_rows
добавляет студии из строк «Аудио 2: AC3 … (MVO, LostFilm)», «Аудио Rus: … |
TVShows» (studio_source=codec), которых нет среди строк релиза; тот же шаг
в tools/relabel_studios.py (повторный запуск ничего не добавляет).
labels.csv: +6 428 строк в 2 862 релизах (kinozal 3 444, nnm 1 609,
rutracker 1 375), со студией 29 331 -> 35 759. tests/e2e_segmenter.py:
модель через E2E_MODEL.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-02 20:30:52 +07:00
DenozordecandClaude Opus 5.5 63878f7874 Модель для Docker: base, обученная на доразмеченных студиях
docker / build (push) Successful in 1m21s
models/runs/20261102_152919_base_relabel -> models/best -> docker-models
(tools/pack_models.py --stage). Тестовая выборка (5 235 строк): joint
exact 0.880 -> 0.953, span exact 0.880 -> 0.955; исправлено 541 строка,
сломано 157. Релизы (по 400 страниц, P/R пар тип+студия): nnm
0.583/0.590 -> 0.853/0.859, rutracker 0.891/0.921 -> 0.887/0.911,
kinozal 0.779/0.926 -> 0.781/0.930. Сегментатор прежний.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-02 15:43:31 +07:00
DenozordecandClaude Opus 5.5 666caa60d5 Отчёт аудита данных после доразметки студий
docker / build (push) Successful in 1m27s
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-02 15:38:55 +07:00
DenozordecandClaude Opus 5.5 83bab13893 Доразметка студий: nnm «Перевод: … (Студия)», kinozal из заголовка раздачи
* harvest_core.nnm_part_studio: студия из части строки «Перевод:» nnm
  («Дублированный (Невафильм)», «… - Jaskier»); раньше такие строки шли с
  «(не указана)», и модель училась не извлекать студию даже из
  «Дублированный (Пифагор)». tech-строки со студиями больше не
  выбрасываются, если на странице нет строк «Аудио N» с именами.
* harvest_core.kz_title_rows: kinozal, студии из заголовка «ПМ (LostFilm,
  HDrezka Studio)», которых нет на странице; вход — сегмент как у сервиса,
  строка «Аудио Rus: … | Студия» — в audio_raw.
* tools/relabel_studios.py — то же по готовому labels.csv без пересборки
  страниц; применено к data/labels.csv: со студией 22 061 -> 29 331 строк
  (nnm +3 051, kinozal +4 219 строк в 3 007 релизах); prepare_data:
  39 418 строк, спан студии 24 004 -> 31 214.
* e2e: эталон как aggregate — «тип без студии» убирается, если у типа есть
  студия.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-02 15:20:03 +07:00
DenozordecandClaude Opus 5.5 f91f6cb48e Сегментатор: -1 только для кодек-строк с типом или студией
Пустая кодек-строка («Аудио 1: AC3, 6 ch, 384 kbps - Русский») снова
негатив: с -1 модель разучилась её отбрасывать и на nnm подменяла ею
строку «Перевод: …».

Пробное обучение (2 эпохи, ~34 мин на 27.9k страниц) e2e по 400 тестовых
страниц, P/R пар (тип, студия), текущие веса -> новые: nnm 0.872/0.879 ->
0.836/0.860, rutracker 0.891/0.917 -> 0.883/0.910, kinozal 0.720/0.844 ->
0.724/0.845. Новые веса не лучше текущих, models/segmenter не заменён.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-02 14:10:32 +07:00
DenozordecandClaude Opus 5.5 6470f882f1 Сегментатор: текст kinozal из raw JSON, кодек-строки не как негатив; e2e по 400 страниц
Обучение:
* page_text/kinozal_text: текст kinozal = h1 + «Техданные» + «Релиз» из
  data/raw/kinozal/*.json (в pages/kz-*.txt нет заголовка и «Техданных»,
  откуда половина меток kinozal; сервис видит обе вкладки).
* label_page: позитив — raw или audio_raw; неразмеченная кодек-строка
  русской дорожки («Аудио 3: … Русский (MVO, X)», «Аудио Rus: … | X»)
  получает -1 и в обучение не идёт: как негатив она учила отбрасывать
  кодек-строки. Сводка «Аудио: Русский, английский (…)» остаётся негативом.

Инференс (release):
* model_segments -> (основные, кодек); выбранные моделью кодек-строки идут
  второстепенным источником вместе с правилом codec_segments; иноязычные
  («Казахский (Dub, …)», «English Dubbing», «Original») отбрасываются.
* merge_extra_tracks(adopt_type): кодек-дорожка с типом «неизвестно»
  получает тип единственной дорожки страницы без студии.

e2e_segmenter: тот же текст kinozal, не больше E2E_MAX (400) страниц на
трекер, train-страницы только с --train-pages (меню парсит только тест).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-02 12:05:20 +07:00
DenozordecandClaude Opus 5.5 099d33bdaa Слияние claude/advisor-opus-78114c: модели на пересобранном датасете, Docker, язык и серии
Конфликт в src/release.py: взяты original_info, lostfilm_release,
series_info и серии дорожек из advisor; сохранены same_studio,
merge_extra_tracks и codec_segments. Кодек-дорожкам тоже проставляются
серии.

Кодек-строки теперь подключаются, только если у какой-то дорожки страницы
нет студии: с новыми моделями безусловное подключение роняло precision
студий на rutracker (0.908 -> 0.793). С условием, test-сплит, по 300
релизов, студии P/R: rutracker 0.908/0.882 -> 0.840/0.900, nnm
0.875/0.915 -> 0.875/0.940, kinozal 0.816/0.845 -> 0.800/0.863. Тесты:
240 ok.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-02 11:50:44 +07:00
DenozordecandClaude Opus 5.5 666a266b2f Сегментатор: truncation longest_first — не падать на строке длиннее max_length
С only_second токенизатор бросал исключение, если сама строка (до 220
символов) не помещалась в MAX_LEN и обрезать было нечего, кроме контекста.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-02 11:44:18 +07:00
DenozordecandClaude Opus 5.5 1f9ee46a0d kinozal: догрузка вкладки «Релиз» по URL; кодек-строки «Аудио N» как источник студий
На kinozal во встроенном #tabs только «Техданные» («Перевод:» без студий),
а строки «Аудио N: … (MVO, LostFilm)» лежат во вкладке «Релиз», которую
страница грузит JS. Поэтому по URL определялись только типы без студий.

* fetch: для kinozal скачиваются вкладки showtab(id,N)
  (get_srv_details.php?id=…&pagesd=N, кроме «Техданных» и «Скриншотов»)
  и дописываются в #tabs; недоступная вкладка пропускается.
* release: кодек-строки с типом озвучки берутся правилом codec_segments
  (сегментатор их отбрасывает — в разметке rutracker это не raw) и идут
  второстепенным источником (source=codec / page+codec): только дорожки
  со студией, дубли студии (same_studio) пропускаются, студия вписывается
  в дорожку того же типа без студии. «English Dubbing» и т.п. не берутся.
* merge_title_tracks переведён на общий merge_extra_tracks.

e2e test rutracker без изменений (P 0.988 / R 0.982); train-страницы
P 0.975 -> 0.951. Тесты: 77 ok.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-02 11:33:01 +07:00
DenozordecandClaude Sonnet 5.5 5bd3b94b46 Ссылка lostfilm.tv: сразу MVO LostFilm без загрузки страницы
docker / build (push) Successful in 1m26s
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-11-01 21:32:35 +07:00
DenozordecandClaude Sonnet 5.5 111e854789 Модель переобучена на пересобранном датасете (15 классов, люб. дубляж); модели в Git LFS обновлены, документация
docker / build (push) Successful in 1m49s
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-29 20:27:26 +07:00
DenozordecandClaude Sonnet 5.5 05537ac9e9 Датасет и обучение: класс «люб. дубляж», раскладка многотиповых строк, язык из «Аудио», строки из «Аудио», потолок повторов, веса классов
docker / build (push) Successful in 1m40s
- harvest_core: дубляж — тип, а не часть имени студии; split_multi_rows; audio_only_rows; kinozal сопоставляет все аудиодорожки
- prepare_data: --max-dup, отсев остатков многотиповых строк
- train: веса классов (корень из обратной частоты, потолок 4), --no-class-weights
- исправлены регулярки с \b, записанные как символ BS (predict.py, audio18.py)
- PARSE_VERSION 3: кэш разбора сбрасывается
- docs/dataset.md, docs/api-reference.md обновлены

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-29 18:13:07 +07:00
DenozordecandClaude Sonnet 5.5 e648415719 Язык дорожки из строки «Аудио» (UKR вместо RUS), студия |Дубляж, Имя|, каналы 5.1, оригинальная дорожка, язык в studios, защита от студий «Дубляжная»
docker / build (push) Successful in 1m40s
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-29 17:55:08 +07:00
DenozordecandClaude Sonnet 5.5 9528113cfd Документация: cookie для kinozal необязателен, API-токен необязателен
docker / build (push) Successful in 1m26s
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-29 14:29:26 +07:00
DenozordecandClaude Sonnet 5.5 4e83474652 Справочник API: точные строки классов, схемы полей с null, коды и тело ошибок
docker / build (push) Successful in 35s
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-29 13:56:12 +07:00
DenozordecandClaude Sonnet 5.5 e2acebadc6 Документация: справочник значений ответа сервиса (14 классов, поля, принцип работы)
docker / build (push) Successful in 42s
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-29 13:52:20 +07:00
DenozordecandClaude Sonnet 5.5 e8a38f1e13 CI: проверка образа без шума трассировок при ожидании загрузки модели
docker / build (push) Successful in 37s
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-29 13:34:03 +07:00
DenozordecandClaude Sonnet 5.5 791a5ee8e1 Модели в образе: docker-models/models в Git LFS, CI берёт их из репозитория
docker / build (push) Successful in 1m26s
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-29 13:26:48 +07:00
DenozordecandClaude Sonnet 5.5 85d48be9f3 Образ в реестре: owner/grabber-ai без повторяющегося сегмента
docker / build (push) Successful in 16s
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-28 19:40:23 +07:00
DenozordecandClaude Sonnet 5.5 71d9700f55 Переименование: DUB-AI → grabber-ai (образ, сервис, документация, примеры)
docker / build (push) Successful in 21s
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-28 18:57:41 +07:00
DenozordecandClaude Sonnet 5.5 a64ced71d2 CI: реестр по HTTPS-адресу git.shx.one, а не внутреннему адресу Gitea
docker / build (push) Successful in 49s
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-28 17:24:45 +07:00
DenozordecandClaude Sonnet 5.5 df08cbc121 CI: токен реестра и моделей из секрета ACTION_PAT
docker / build (push) Failing after 1m47s
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-28 17:22:03 +07:00
DenozordecandClaude Sonnet 5.5 efc9a4f56a Docker-сервис, выбор основы и сравнение моделей, сборщик датасета
docker / build (push) Failing after 39s
- Docker: Dockerfile (CPU), compose с FlareSolverr, настройка через DUB_* переменные,
  токен доступа к /predict, tools/pack_models.py, workflow Gitea Actions, docs/docker.md
- Модель грузится офлайн (config.json рядом с весами); общий код вынесен в src/spans.py,
  сервису не нужны sklearn/matplotlib/pandas
- Обучение: профили tiny2/base/large/modern, запуски в models/runs, реестр и честное
  сравнение на одной тестовой выборке (src/runs.py), пункт меню «Модели»
- Датасет: язык и аудио-параметры дорожек, 18+ по строкам «Аудио», ручные метки по ссылкам,
  переиндексация сохранённого HTML, параллельная сборка, сбалансированная выборка
- Тексты страниц (data/pages) больше не хранятся в git

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-28 17:19:10 +07:00
DenozordecandClaude Sonnet 5.5 6a87bc993c Слияние claude/advisor-opus-78114c: сегментатор страниц, URL/FlareSolverr, агрегат релиза
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-27 20:07:22 +07:00
DenozordecandClaude Sonnet 5.5 d155b8584b Обученный сегментатор страниц (главный путь), правила — запасной; фикстура rt-topic-6870900
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-27 18:06:47 +07:00
DenozordecandClaude Sonnet 5.5 96e5fa0d75 Фикс html_to_text (студия-ссылка в строке), BLOCK теги, схлопывание дорожек без студии, FlareSolverr-фолбэки
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-27 18:01:22 +07:00
DenozordecandClaude Sonnet 5.5 dce219aeee FlareSolverr-фолбэк для загрузки по ссылке; -ReleaseUrl в predict.ps1
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-27 17:29:58 +07:00
Denozordec 2eb4f8b72e Merge claude/advisor-opus-78114c: релиз целиком, URL-вход, int8 tiny2, фикс сегментации, датасет 6864 2026-10-27 17:22:31 +07:00
DenozordecandClaude Sonnet 5.5 bc9ff36e61 Сегментация: фикс резки по запятой, refine_span; датасет 6864 строк, переобучение
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-27 17:21:49 +07:00
DenozordecandClaude Sonnet 5.5 6be369c415 Слияние студии из заголовка, title в сервисе, детект заглушек, e2e через predict_release
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-27 17:05:30 +07:00
DenozordecandClaude Sonnet 5.5 8cbd800ec7 Релиз целиком: вход по ссылке, агрегат студий/типов/18+, малая int8-модель
- src/fetch.py: загрузка по URL (allowlist трекеров, защита от SSRF, cp1251)
- src/release.py: агрегат релиза, студии из заголовка раздачи (ПМ (LostFilm))
- predict --url, POST /predict {"url"}; ответ расширен, tracks сохранён
- export_onnx --quantize: tiny2 int8 29 МБ, parity 99.2-100%
- тесты (52 ok), docs/plan.md, docs; target/ убран из git

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-27 17:02:04 +07:00
DUB-AI 98e4031037 PowerShell-клиент predict.ps1 + charset=utf-8 в ответах сервиса (фикс кириллицы в PS 5.1) 2026-10-27 16:47:45 +07:00
DUB-AI 8dbca3f4a3 DUB-AI: multi-task модель (тип озвучки + автор-спан + 18+), обучение/инференс/ONNX/сервис, тесты и документация 2026-10-27 16:43:36 +07:00