Фото товаров по 3 МБ тормозят каталог: Thumbor на своём сервере
Поставщик присылает фото разных размеров, страницы категорий тянут оригиналы по несколько мегабайт. Разбираю Thumbor: лицензия MIT, подпись адресов, кеш, WebP и AVIF, нагрузка на процессор и отличия от imgproxy, плагинов CMS и CDN.
Сделаю под ключ: разберу задачу, назову срок и цену. Чтобы начать, напишите в Telegram одной фразой.
Обсудить лёгкие фото для каталога магазинаКарточка 300 пикселей, файл 3 мегабайта
Поставщик присылает снимки как попало: один 4000 на 3000, второй 800 на 800, третий вертикальный с белыми полями. Менеджер заливает всё в каталог как есть. В карточке на странице категории фото занимает 300 пикселей, а скачивается оригинал. Прикидка, не замер: 48 карточек по 2 МБ дают около 100 МБ на страницу. Покупатель на мобильном интернете ждёт.
Резать вручную пять размеров на двадцать тысяч товаров никто не станет. Нужен сервис, который делает нужный размер в момент запроса и запоминает результат. Пакетную обработку я описывал в статье про фото товаров пачками.
Что такое Thumbor и что я проверил
12 октября о нём написал канал GitHub Radar. Я открыл репозиторий thumbor/thumbor и сверил по первоисточникам. Файл LICENSE: MIT. Репозиторий создан 16 марта 2011 года, около 10,5 тысячи звёзд, не архивный, последний коммит 11 октября 2026 года. Релизы: 7.7.7 в мае 2025, затем 7.8.0 в мае 2026. Из последних ста коммитов 61 написал один человек, остальное в основном автоматические обновления зависимостей. Проект живой, но держится на одном мейнтейнере.
Устанавливается тремя способами: pip install thumbor, пакет из Debian или Ubuntu, Docker-образ ghcr.io/thumbor/thumbor. Нужен Python 3.10 или новее. Для распознавания лиц нужен OpenCV, он ставится как дополнение: pip install thumbor[opencv]. В Dockerfile из репозитория стоит thumbor[all], то есть OpenCV, AVIF и HEIF внутри образа. Образ я не скачивал.
Адрес с параметрами и подпись
Размер задаётся прямо в адресе: /300x200/smart/адрес-картинки. Есть режим fit-in, когда фото вписывается в рамку без обрезки, и фильтры в том же адресе, например filters:quality(80). Шаблон сайта просто подставляет нужные размеры.
Главная опасность описана в документации: злоумышленник перебирает размеры 300x301, 300x302 и так далее, и сервер до отказа занят нарезкой. Защита называется SECURITY_KEY. Сайт подписывает параметры алгоритмом HMAC-SHA1, Thumbor проверяет подпись. Адрес с чужими размерами не пройдёт.
Во-первых, в коде ключ по умолчанию MY_SECURE_KEY, его меняют. Во-вторых, режим /unsafe без подписи по умолчанию включён, на боевом сервере документация требует его отключить параметром ALLOW_UNSAFE_URL. В-третьих, релиз 7.8.0 исправил обход проверки подписи и ещё несколько дыр, поэтому брать нужно его или новее.
Форматы, кеш и нагрузка
Фильтр format() принимает webp, jpeg, gif, png, avif и heic. Автовыбор по заголовку браузера (AUTO_WEBP, AUTO_AVIF) в коде выключен по умолчанию, включается в настройках. Для AVIF нужен дополнительный пакет pillow-avif-plugin. Сколько веса это сэкономит на вашем каталоге, проверьте на сотне своих файлов.
Теперь про кеш. В коде RESULT_STORAGE по умолчанию пустой, то есть готовые картинки не сохраняются и каждый запрос режется заново. Результат нужно включить в настройках, хранить на диске. Дополнительно ставят NGINX или CDN перед сервисом. Оригиналы Thumbor загружает по HTTP с вашего сайта или читает из папки, и хранит у себя. В списке плагинов в документации есть хранилище для Amazon S3, оно поддерживается отдельно от основного проекта.
Нагрузка на процессор настоящая: это Python и Pillow. Производительность в секундах я не мерил. Документация советует запускать несколько процессов за балансировщиком и отдельно предупреждает, что поиск лиц дорогой и может занять весь процессор, поэтому его выносят в очередь.
Чем отличается от imgproxy, плагинов и CDN
imgproxy написан на Go, лицензия Apache-2.0, релиз 4.0.17 вышел 30 сентября 2026 года. Подпись адресов там тоже есть, формат адреса похож по идее. В бесплатной версии только простое умное кадрирование, а распознавание объектов вынесено в платную Pro. Если лица и сложное кадрирование вам не нужны, imgproxy может подойти не хуже. У Thumbor лица через OpenCV бесплатно, минус в Python и одном мейнтейнере.
Плагин CMS режет картинки при загрузке на заранее заданные размеры. Это просто и дёшево, но новый размер в новом шаблоне значит пересчёт всего каталога. CDN с обработкой картинок снимает работу с вашего сервера, но оригиналы ваших фото проходят через стороннюю площадку, и платите вы за трафик. Свой сервис оставляет файлы у вас.
Что важно учесть
Умное кадрирование ищет лица, а если их нет, угловые точки на снимке. Для белого фона и товара посередине лучше работает fit-in без обрезки. Для фото с моделями или лукбуков кадрирование полезнее, но по умолчанию детекторы выключены, их включают явно, и качество на ваших снимках проверяйте по режиму debug, он рисует найденные точки. Если на снимках люди, помните о согласии, я разбирал это в отдельной заметке про фото людей на сайте.
Ещё ограничения. Thumbor не улучшает слабый исходник: из фото 300 пикселей чёткая картинка в 1000 не получится, для этого есть нейросетевой апскейл. Параметр ALLOWED_SIZES, который ограничивает допустимые размеры списком, появился в основной ветке 3 октября 2026 года, в релиз 7.8.0 он не входит. Подпись адресов закрывает ту же задачу и работает уже сейчас.
Что можно сделать уже сейчас
Замерить страницу. Откройте категорию в браузере на мобильном профиле, посмотрите в сетевой панели общий вес картинок и сколько из них отдано в натуральном размере. Это ваш исходный показатель, общие приёмы ускорения сайта разобраны отдельно.
Поднять стенд. Взять сто разных фото от поставщика, запустить Docker-образ на тестовом сервере, включить кеш, отключить /unsafe, задать свой ключ. Сравнить вес и вид в WebP, AVIF и JPEG.
Подключить шаблон. В Битриксе, OpenCart или WooCommerce шаблон формирует подписанный адрес вместо ссылки на оригинал. Библиотеки подписи в документации перечислены для Python, Node.js, Ruby, Java и PHP.
Заранее прогреть кеш. Перед запуском один раз обойти каталог, чтобы первый покупатель не ждал нарезки.
Частые вопросы
Фото уйдут третьим лицам?
Сервис работает на вашем сервере и тянет оригиналы с вашего же сайта. Если не подключать внешнее хранилище или CDN, файлы остаются у вас.
Сколько это стоит?
Сам Thumbor бесплатный. Сервер, настройку и подключение к сайту считаем отдельно, ориентиры на странице цен.
Подойдёт ли для WooCommerce и Битрикса?
Thumbor это HTTP-сервис, ему всё равно, на чём сайт. Шаблон дорабатывается, чтобы адреса картинок вели на него. Готовых модулей под эти CMS я не проверял.
Коротко о главном
Thumbor подходит, когда каталог большой, фото приходят в разных размерах, а страницы тяжёлые. Три условия: подписанные адреса, включённый кеш, версия 7.8.0 или новее. Если нужны только пара размеров и маленький магазин, хватит плагина CMS. Если важны лица и сложное кадрирование, Thumbor сильнее бесплатного imgproxy.
Хотите, чтобы сайт отдавал лёгкие картинки без ручной нарезки? Напишите мне в Telegram кодовое слово «КАДР», пришлю короткий план: какой сервис ставить, сколько размеров нужно и как подключить к вашему шаблону. Подробнее: аудит и ускорение сайта.
Что я делаю для бизнеса
Напишите одной фразой, что нужно. Отвечу, что подойдёт, сколько займёт и сколько стоит. Сообщение уже подготовлено.
- Боты в Telegram, MAX, VK
- Автоматизация процессов и CRM
- Аналитика и дашборды
- Сайты и лендинги под ключ
Разборы, кейсы и практика — без воды. Выходит регулярно, читать 3–5 минут.


