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