feat: import F95 screenshot galleries with AVIF support
CI / frontend (push) Failing after 19s
CI / backend (push) Failing after 41s

This commit is contained in:
mrleo1nid committed 2026-10-26 17:51:19 +03:00
1 parent 5b911d1e3b
commit 69f71cb836
21 files changed
+513 -33

No files matched your search

+25
View File
@@ -54,3 +54,28 @@ backend. Шифрование использует `SECRET_KEY`; при смен
20 МиБ, переходы за пределы F95zone блокируются до отправки cookie.
Если изображение скачать не удалось, текстовые данные импортируются с сообщением
об ошибке превью; текущая обложка игры сохраняется.
F95zone может отдать AVIF даже по ссылке с расширением `.png`. Для таких изображений
нужна Pillow 11.3.0 с поддержкой AVIF (версия закреплена в requirements.txt).
После обновления зависимости пересоберите образ backend: `docker compose up -d --build backend`.
Повторите импорт из темы, чтобы получить обложку; уже сохранённые обложки менять не требуется.
## Галерея игры
Импорт также собирает `a.js-lbImage` из первого сообщения, включая блоки со
скриншотами в спойлерах. Используется полный `href` со всеми параметрами доступа,
а не маленький `img src` из каталога `thumb`. Повторы и обложка исключаются;
изображения из ответов в теме не импортируются.
Картинки скачиваются с личными cookie, преобразуются в WebP до 1920×1920 и
сохраняются локально. Для просмотра до сохранения формы API возвращает отдельные
небольшие превью. Подписанные ссылки F95zone и cookie в карточке игры не хранятся.
За один импорт загружается до 24 изображений; ошибки отдельных файлов не отменяют
остальные. Форма показывает количество загруженных кадров и предупреждение о пропусках.
Галерею можно просмотреть и удалить лишние кадры перед сохранением. В редакторе
игры импорт дополняет имеющуюся галерею без повторов.
В карточке можно сохранить до 48 кадров; во время импорта сохранение формы недоступно.
Для хранения галереи нужна
миграция `0006`; после сохранения доступ к картинкам подчиняется видимости игры,
а сборщик мусора сохраняет все изображения, на которые ссылается галерея.