Яндекс.Диск — скачиваем фото и видео с хранилища «безлимита»

Привет, Хабр. Ранее я писал статью, посвященную недоступности файлам на «Яндекс.Диске». Я разобрал ситуацию подробнее и выяснил — большинство фото можно восстановить даже если они недоступны для скачивания, с видео всё сложнее. Также написал программу для того, чтобы Вы могли скачать свои фото и видео (в том числе с безлимита) уже сейчас, пока они остаются доступными. Разберём ниже.
Во первых — что произошло?

8 октября после новости о инциденте в дата‑центре Сасово часть файлов на Яндекс.Диске стала недоступной. Тогда Яндекс.Диск смог починить данный функционал к ночи 11 октября, но уже через пару часов произошёл повторный инцидент с дата‑центром Яндекса, но уже во Владимире. Функционал для скачивания фото и видео стал частично недоступен — как сообщает служба Яндекса «для снижения нагрузки на сервера», но после анализа того, что произошло с видео можно сказать точно — есть кластеры данных, которые вышли из строя, из‑за чего видео не могут скачаться. И это не починить, если у Яндекса нет резервной копии данных кластеров. Ведущий аналитик Mobile Research Group Эльдар Муртазин считает, что часть данных потеряна — компания Яндекс дополнительной информации не предоставила. В моей статье Яндекс также оставил комментарий — но ответа на моё сообщение, связанное с тем, что их сервера буквально «кричат», что данных больше нет не последовало.
Как это работает?
При просмотре файлов (например с «безлимита») браузер для того чтобы понять «какие именно фото и видео надо отображать в ленте» и «какие превью относятся к какому файлу» выполняет запрос на сервера Яндекса. Тот ему отвечает и отдает список файлов, в этом же ответе.

Там же есть и размеры файлов — ORIGINAL (оригинал файла), XXXL (сжатое изображение с максимальным качеством), XXL (сжатое изображение с качеством ниже), XL (сжатое изображение с качеством ещё ниже) и так далее. Они, предположительно, хранятся на S3, из‑за чего даже после потери оригиналов они остаются доступными. Как долго они ещё будут доступны — неизвестно, всё зависит от команды разработчиков Яндекса.
С видео всё труднее — сервер отдает информацию по нему только тогда, когда происходит «физическое» нажатие на кнопку «скачать» — там сервер отдаёт только одну ссылку, на оригинал. И отдается только оригинал, из‑за чего копии на S3 просто напросто нет, и восстановить их также легко как фото будет трудно.
Почему некоторые видео даже не начинают скачиваться?

Я проанализировал происходящее и выяснил — это происходит потому что часть байт у видео недоступна. В большинстве случаев скачать видео всё же можно — но оно будет в битом виде (то есть например из 1 минуты видео будет доступно только 15...30 секунд, всё зависит от случая к случаю). Что с этим делать сейчас — пока не понятно, но лучше скачать видео в таком виде, чем не скачать вовсе.
Нагрузка на «Яндекс» и почему убрали возможность загрузки двух и более файлов
У «Яндекса», как мне кажется, инфраструктура была не готова к тому, что часть файлов будет недоступна на кластерах данных. По комментариям к прошлой статье можно сказать точно — архивы скачивались битые. Если Вы скачивали архив, к примеру, из 9 файлов, и в архив попадал какой нибудь «битый файл», то яндекс ждал ещё ~5 секунд ответа с кластера, но в конечном итоге завершал формирование архива. В таком случае архив скачивается битый. Если же в архив не попадали битые файлы, то архив скачивался нормально. При этом можно догадаться, что отключили функционал этот из‑за того, что создание архива создает достаточно большую нагрузку на ресурсы компании, а они сейчас ограничены из‑за выхода из строя основных мощностей.
Скорее всего отключили эту возможность именно из‑за этого — что будет делать команда «Яндекса» непонятно.
Как скачать фото и видео с Яндекс.Диска сейчас?
Дисклеймер. Все действия вы выполняете на свой страх и риск. Скачивание фотографий и видео, загруженных через функцию безлимитной автозагрузки Яндекс Диска, может нарушать условия использования сервиса и повлечь за собой ограничение доступа или блокировку аккаунта. Автор не несёт ответственности за возможные последствия.
Решение за вами: сохранить свои фотографии и видео сейчас, приняв риск блокировки аккаунта, или продолжить пользоваться сервисом, сохраняя доступ к аккаунту, но рискуя потерять доступ к своим данным. Никто не может гарантировать, что завтра недоступных фотографий и видео не станет значительно больше, чем сегодня. Выбирайте сами, что для вас важнее: сохранность собственных данных или отсутствие риска для аккаунта. В любом случае помните: доступ к сервису и сохранность ваших файлов — не одно и то же.
Так как риск, что скорее всего скоро недоступными станут еще больше фото и видео остается высоким, то я решил написать программу для загрузки фото и видео с Яндекс.Диска. Она использует функционал выше для загрузки файлов на локальное хранилище Вашего ПК. Программа работает только под системами Windows/Linux/MacOS, под капотом также используется mitmproxy для перехвата запросов с Вашего браузера в программу. Никакие данные на сервера не уходят — исходный код доступен здесь. Важно: программа может генерировать большое количество трафика и базовое количество потоков установлено на 8 чтобы не перегрузить сервера Яндекса в том числе.
Работает скачивание фото через разные размеры (ORIGINAL, XXXL, XXL, XL, и тд), которые предположительно лежат на S3 (все кроме ORIGINAL). Скачивание видео происходит «блоками», давайте представим это так: у нас есть файл весом 512 кб, поделим его по 32 килобайта (размер блока). Скрипт пытается скачать первый блок, сервер отдает Timeout после установления HTTPS‑соединения. Хорошо, идём дальше, качаем второй блок, и представим, что сервер его отдает — значит записываем этот блок; и так далее. Напомню, видео могут быть битыми, поэтому тут уже как повезёт.

Пока что функционал действителен только для фото и видео — для скачивания файлов программа пока что не подходит. Будем следить за ситуацией.
Что необходимо сделать:
Скачать zip‑архив с исходниками
Установить mitmproxy для того:
На MacOS: в терминале выполнить
brew install mitmproxyНа Linux:
sudo apt install mitmproxyНа Windows: https://www.mitmproxy.org/ — инструкция тут
Установить Python:
На MacOS: в терминале выполнить
brew install pythonНа Linux:
sudo apt install -y python3 python3-pip python3-venvНа Windows: открываем PowerShell от Администратора и прописываем
winget install Python.Python.3.14
Установить ffmpeg
Как установить FFmpeg
Установка FFmpeg
Инструкция для Windows, Linux и macOS.
Windows
Способ 1: через пакетный менеджер (проще всего)
Откройте PowerShell или командную строку и выполните одну из команд:
winget install Gyan.FFmpegПосле установки закройте и заново откройте терминал.
Linux
Debian / Ubuntu / Linux Mint
sudo apt update sudo apt install ffmpegFedora
В Fedora полный набор кодеков доступен через репозиторий RPM Fusion:
sudo dnf install https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm sudo dnf install ffmpegArch / Manjaro
sudo pacman -S ffmpegopenSUSE
sudo zypper install ffmpegЛюбой дистрибутив через Snap
sudo snap install ffmpegmacOS
Способ 1: Homebrew (рекомендуется)
Если Homebrew ещё не установлен, поставьте его с brew.sh. Затем:
brew install ffmpegСпособ 2: MacPorts
sudo port install ffmpegПроверка установки
На любой системе выполните:
ffmpeg -versionЕсли выводится номер версии и параметры сборки, всё установлено правильно. Если в Windows пишет, что команда не найдена, значит, путь в Path указан неверно или терминал не был перезапущен.
Установить сертификат mitmproxy (ссылка на инструкцию) для перехвата HTTPS‑трафика, например на Windows можно установить командой в Windows PowerShell с правами Администратора:
certutil -addstore root "$env:USERPROFILE\.mitmproxy\mitmproxy-ca-cert.cer"Перезапустить систему, чтобы все настройки точно сохранились.
Зайти в папку с исходниками, перейти в папку «server» и выполнить установку
pip install -r requitements.txtВ папке server запустить сервер командой
python3server.py(либо иная другая команда python), в папке capture выполнитьmitmdump -saddon.py--listen-host 127.0.0.1 --listen-port 8000
Должно быть запущено 2 терминала одновременноНастроить proxy‑http/proxy-https на 127.0.0.1:8000 в системе либо в браузере с «Яндекс.Диском» (на Windows необходимо настроить прокси-сервер в параметрах)
Перейти на Яндекс.Диск, открыть страницу «Фото», выбрать «Показывать все» и выбрать «Скриншоты» (чтобы сохранить и их тоже). Зайти на http://localhost:8001 и посмотреть, появились ли файлы. Если появились — все хорошо, надо пролистать всю ленту вручную сверху до конца. ВАЖНО: Да, пролистать ленту надо ВРУЧНУЮ сверху до конца. Если же не появились — посмотрите сообщения в консолях и обратитесь к ИИ:) либо отпишитесь в комментариях.
После того как всё проматали — перейдите на локальную страницу localhost:8001 и посмотрите, есть ли сетка фотографий. ВНИМАНИЕ: превью фотографий не будут отображаться до загрузки. Если всё хорошо — следуем инструкции, выбираем «Статус загрузки», «фото», дальше вводим количество потоков, нажимаем «Применить» и «Скачать только фото».
Ждать и следить за статусом загрузки.
После успешного скачивания перед выключением mitmdump незабудьте убрать системный proxy) Файлы будут доступны в папке запуска сервера в папке «files» и разбросаны по папкам типа «files/год‑месяц‑день/...»

Скриншот интерфейса программы: скачивание видео с битыми фрагментами

Рекомендую вначале скачивать только фото, скачивание видео работает достаточно долго. Я уверен, что среди читателей есть энтузиасты, которые помогут причесать программу — добро пожаловать в пулл реквесты). Также уверен что есть и энтузиасты, которые (возможно) смогут помочь с более подробным объяснением как именно устанавливать программу и как именно ее использовать — добро пожаловать с комментарии) После скачивания не рекомендую удалять что‑то с Яндекс.Диска: часть файлов действительно может вернуться позже, и тогда недокачанное можно будет докачать нормальным способом.
Будем следить за развитием событий.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
KioskNews shows a cleaned-up reading view extracted from the publisher’s page — the original always lives on their site, not ours.