Релиз целиком: вход по ссылке, агрегат студий/типов/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]>
This commit is contained in:
DenozordecandClaude Sonnet 5.5 committed 2026-10-27 17:02:04 +07:00
1 parent 98e4031037
commit 8cbd800ec7
2473 files changed
+424 -6060

No files matched your search

+23
View File
@@ -20,6 +20,29 @@ python -m src.predict --file page.txt --out result.json --model models/base
HTML распознаётся по содержимому, так что `--html` и `--file`
взаимозаменяемы.
## Ссылка на раздачу и агрегат релиза
```bash
python -m src.predict --url https://rutracker.org/forum/viewtopic.php?t=123
python -m src.predict --url https://kinozal.tv/details.php?id=1 --cookie "uid=..; pass=.."
```
Поддерживаются только rutracker / kinozal / nnm-club (allowlist доменов,
редиректы за его пределы запрещены). Для `--html`, `--file` и `--url` ответ —
агрегат релиза: к `tracks` добавлены
| Поле | Описание |
|---|---|
| `studios` | уникальные `{studio, translation_type, is_18plus}` |
| `translation_types` | отсортированный список типов релиза |
| `is_18plus` | `true`, если 18+ хотя бы у одной дорожки |
| `title` | заголовок раздачи (если найден в HTML) |
| `tracker` | только для `--url` |
Дорожки дедуплицируются по (тип, студия). Студии из заголовка раздачи вида
`ПМ (LostFilm)`, которых нет в описании, добавляются с `source: "title"`
(у остальных `source: "page"`). `--text` по-прежнему возвращает только `tracks`.
## Python API
```python