Документация

От быстрого старта до тонкой настройки.
Всё, что нужно знать для работы с LW Compress

Быстрый старт

Через веб-интерфейс

  1. Откройте little-white.by/compress
  2. Перетащите изображения в зону загрузки (или нажмите «выберите файлы»)
  3. Выберите формат и качество при необходимости
  4. Скачайте результат — один файл или ZIP-архив
Без регистрации: до 50 файлов в день, макс. 2 МБ на файл. Для больших объёмов подключите тариф Pro.

Через API (Pro)

  1. Зарегистрируйтесь на little-white.by и подключите тариф Pro
  2. Получите API-ключ в личном кабинете
  3. Отправьте запрос:
# Node.js const form = new FormData(); form.append('file', fs.createReadStream('photo.jpg')); form.append('format', 'avif'); const res = await fetch('https://little-white.by/compress/v1/compress', { method: 'POST', headers: { Authorization: 'Bearer sk-lw-ваш-ключ' }, body: form }); const buffer = await res.arrayBuffer(); fs.writeFileSync('result.avif', Buffer.from(buffer));
# Python import requests res = requests.post( 'https://little-white.by/compress/v1/compress', headers={'Authorization': 'Bearer sk-lw-ваш-ключ'}, files={'file': open('photo.jpg', 'rb')}, data={'format': 'avif'} ) with open('result.avif', 'wb') as f: f.write(res.content)

Поддерживаемые форматы

На вход принимаются JPEG, PNG и WebP. На выходе — любой из пяти форматов:

PNG

Сохраняет прозрачность. Лучший выбор для иконок и UI-элементов.

~60–80% экономии

JPEG

Trellis quantization — визуально лучше стандартного JPEG при меньшем размере.

~40–60% экономии

WebP

Поддержан всеми современными браузерами. Хороший баланс размера и качества.

~50–70% экономии

AVIF

Формат нового поколения. Лучшее соотношение качество/размер. Chrome, Firefox, Safari 16+.

~60–80% экономии

JPEG XL

Замена JPEG от JPEG Committee. Поддерживает прозрачность, HDR, lossless. Chrome 91+, Safari 17+.

~50–70% экономии

Какой формат выбрать?

Задача Рекомендация Почему
Фото на сайте AVIF + JPEG fallback Лучшее сжатие, поддержка >95% браузеров через <picture>
E-commerce каталог WebP 100% поддержка, быстрое кодирование, хорошее качество
Иконки и UI PNG Прозрачность, чёткие линии
Максимальная экономия AVIF Минимальный размер при сохранении визуального качества
Архивное хранение JPEG XL (lossless) Lossless + HDR + прозрачность в одном формате
Режим «Оригинал» сжимает файл в исходном формате без конвертации. Подходит, когда важно сохранить совместимость.

Webhook-уведомления

При отправке параметра webhook в запросе на сжатие, сервер отправит POST-запрос на указанный URL по завершению обработки.

Формат уведомления

POST https://your-server.com/webhook Content-Type: application/json X-LW-Signature: sha256=abc123... X-LW-Timestamp: 1719000000 { "event": "compress.done", "original_name": "photo.jpg", "original_size": 4398046, "result_size": 921654, "format": "avif", "savings_pct": 79.0, "download_url": "https://little-white.by/compress/dl/..." }

Проверка подписи

const crypto = require('crypto'); function verifyWebhook(body, signature, apiKey) { const expected = 'sha256=' + crypto .createHmac('sha256', apiKey) .update(body) .digest('hex'); return crypto.timingSafeEqual( Buffer.from(signature), Buffer.from(expected) ); }
Безопасность: Всегда проверяйте подпись и timestamp (разница <5 минут). Это защищает от replay-атак и подделки уведомлений.

IP-whitelist

Ограничьте использование API-ключа списком доверенных IP-адресов. Настраивается в личном кабинете или через API:

curl -X PUT https://little-white.by/compress/v1/ips \ -H "Authorization: Bearer sk-lw-ваш-ключ" \ -H "Content-Type: application/json" \ -d '{"ips": ["203.0.113.10", "198.51.100.0/24"]}'

Поддерживаются отдельные IP и CIDR-подсети. Пустой массив — доступ с любого IP (whitelist отключён).

Лимиты и квоты

Параметр Free Pro
Сжатий в день 50 500
Макс. размер файла 2 МБ 10 МБ
Макс. разрешение 50 мегапикселей (например, 7 000 × 7 000 px)
Rate limit (сжатие) 60 запросов / минута (per IP)
Batch-запросы до 20 файлов
Мощности обработки Общая очередь Выделенный сервер — без общей очереди
Хранение результата 1 час после обработки

При превышении лимита API возвращает 429 Too Many Requests. Текущее использование доступно через GET /v1/limits.

Изображения с разрешением более 50 мегапикселей (произведение ширины на высоту в пикселях) отклоняются с ответом 400 и сообщением «Изображение слишком большое: максимум 50 мегапикселей. Ограничение по разрешению не зависит от размера файла: даже лёгкий по весу файл может превышать лимит по числу пикселей.

Безопасность

  • API-ключи хранятся на сервере как хэши — утечка базы не компрометирует ключи
  • Webhook-подписи — HMAC-SHA256 + timestamp + constant-time сравнение
  • SSRF-защита — webhook URL проверяется на приватные диапазоны
  • Decompression bomb — защита от ZIP-бомб и декомпрессионных атак через PNG
  • Rate limiting — per-IP и per-key
  • Файлы автоматически удаляются через 1 час после обработки