Skip to content

v1.0.2

Choose a tag to compare

@github-actions github-actions released this 18 May 02:42
· 10 commits to master since this release

Главное в этом релизе — детектирование удалённых по DMCA постов в выдаче и опциональная возможность восстановить картинки из таких постов через альтернативное зеркало JR. Плюс новая секция «Сеть» в настройках на случай, если хочется заворачивать GraphQL-запросы в свой SOCKS5-прокси.

Удалённые посты в выдаче

Часть постов на JR получает жалобу на копирайт, и сайт удаляет их метаданные из API. На превью такой пост раньше выглядел как обычная плитка с превьюшкой (превьюшка генерится по post.id и остаётся), но «Найти и скачать» молча давал ноль файлов — потому что у поста нет attributes в GraphQL-ответе.

  • Теперь такие посты помечаются маркером: серая плитка с надписью «🚫 УДАЛЕНО ПО КОПИРАЙТУ» в гриде превью. Кнопка ручного выбора на ней скрыта.
  • В ⚙ → Превью появилась галка «Скрывать удалённые посты» (по умолчанию on) — если включено, такие плитки в выдачу не попадают вообще.
  • В пайплайне скачивания (produce()) удалённые посты пропускаются явно, без артефактов в .manifest.json.

Детектор простой: GraphQL возвращает attributes: [] И Post.text содержит /censorship/ — это конвенция JR для DMCA-стабов.

Восстановление удалённых постов через зеркало

У JR существует независимое .onion-зеркало (reactorccdnf36aqvq34zbfzqyrcrpg3eyhilauovitrvmcjovsujmid.onion) — отдельная инсталляция JR-движка с собственной базой. Это зеркало не синхронизирует DMCA-уведомления с основным сайтом: метаданные удалённых постов там сохраняются. При этом сами файлы картинок физически остаются на основном CDN (img1..15.joyreactor.cc/pics/post/full/...) — JR не удаляет их с диска, только убирает упоминания из API.

Складывая одно с другим, можно достать оригинальные картинки из удалённых постов: HTML-скрапинг зеркала даёт attribute.id, а файл качается с основного CDN по стандартному URL.

Что нужно установить

Зеркало доступно только через Tor (это .onion-адрес). Нужен Tor Browser — официальный, с torproject.org/download. Альтернативно — отдельный tor-демон.

Приложение Tor не поставляет. Пользователь скачивает и запускает Tor сам, наш downloader только цепляется к локальному SOCKS5-листенеру.

Как настроить

  1. Скачай и установи Tor Browser с torproject.org.
  2. Запусти его, нажми «Соединиться» на стартовом экране, дождись появления зелёного лука («Поздравляем»). Окно Tor Browser должно оставаться запущенным, пока пользуешься восстановлением — закроется он, наш downloader потеряет прокси.
  3. В downloader'е открой ⚙ → Сеть:
    • Включи галку «Использовать SOCKS5-прокси для GraphQL». Поле «SOCKS5 адрес» по дефолту 127.0.0.1:9150 (это порт Tor Browser; для отдельного tor-демона — 127.0.0.1:9050).
    • Нажми «🧅 Подставить .onion» — заполнит поле адреса зеркала.
    • Нажми «🔌 Проверить» — это пробный запрос к зеркалу через прокси. Должен показать зелёный пилл «OK · <время> мс · » (3–6 секунд через Tor — нормально). Если красный — посмотри текст ошибки.
    • Когда тест зелёный, поставь галку «Восстанавливать удалённые посты через .onion».
  4. Перезапусти приложение — сетевой клиент строится один раз при старте, ему нужен фреш-старт чтобы подцепить прокси.

После перезапуска: когда в выдаче встречается DMCA-стаб и восстановление включено, приложение в фоне дёргает зеркало, парсит HTML, достаёт attribute.id, и плитка превращается из серой «удалено» в нормальную с картинкой. Качается всё с основного clearnet CDN, через Tor только метаданные ходят (так быстрее и не нагружает Tor-релеи).

Восстановление работает одинаково и в гриде превью (плитка из серой превращается в нормальную, файлы доступны для ручного отбора), и в массовой загрузке через очередь задач (+ Добавить в очередь): пайплайн постранично собирает DMCA-стабы из выдачи в батч, параллельно (4 воркера) скрейпит зеркало через тот же SOCKS5, и подмешивает восстановленные attribute.id в загрузку транзитом — те же фильтры по дате/тегам/размеру, та же дедупликация по манифесту, тот же лимит. Если recovery не сконфигурирован или конкретный пост на зеркале тоже отсутствует, стаб тихо пропускается и clearnet-часть продолжает работать. Бюджет восстановления — 90 секунд на страницу выдачи.

Что важно понимать

  • Восстановление опционально и off-by-default. Если ты этой функцией не пользуешься — никакой Tor устанавливать не нужно, всё работает как раньше через обычный clearnet GraphQL.
  • Это касается удалённых по копирайту постов. Если файл физически удалён с CDN (бывает на старых-старых постах, где JR прибрался) — никакое зеркало уже не поможет.
  • Картинки качаются с обычного CDN, не через Tor — для бинарных файлов Tor медленный и его сеть не для этого.

Сеть — SOCKS5 для GraphQL

Опционально: можно завернуть только GraphQL-запросы (не скачивание файлов) в локальный SOCKS5-прокси. Off-by-default, никаких прокси-бинарей в дистрибутиве нет — пользователь подключает свой.

Сценарии использования — на усмотрение пользователя. Тех же .onion-восстановлений достаточно для большинства, но кому-то может быть полезен и сам тогглер.

Скачивание

Тот же набор файлов, что и в v1.0.1 — Windows portable / NSIS-setup, macOS universal .app, Linux .tar.gz.

Лицензия

MIT.

Full Changelog: v1.0.1...v1.0.2