
- MODX 3
- PHP 8.2


Пошаговая диагностика. Краткие ответы: FAQ.
Записи остаются в pending, файлы *.webp не появляются.
Админка — Обработать очередь (нужно imageoptimizer_run). С 1.0.4 кнопка крутит батчи до pending = 0. При необходимости Остановить и продолжить позже.
Cron — строка в crontab указывает на правильный PHP и путь:
php core/components/imageoptimizer/cron/convert.phpLock — если предыдущий процесс упал, удалите устаревший lock только после проверки, что worker не запущен: core/cache/imageoptimizer/cron.lock
Ручной прогон:
php core/components/imageoptimizer/cli/convert.php --limit=10Зависшие processing — Сбросить зависшие или дождитесь cron (stuck_minutes).
Энкодеры — вкладка Server: WebP должен быть «Доступен».
enabled — imageoptimizer_enabled=1.
409 worker_busy — cron или Обработать уже работает. UI повторяет до 3 раз. Подождите или снимите lock.
Если появилось «Достигнут лимит времени PHP» — остаток обработает cron или повторный клик Обработать очередь. Для больших каталогов настройте cron и не держите вкладку открытой.
Worker не может создать core/cache/imageoptimizer/. Создайте каталог вручную и проверьте права записи для пользователя PHP:
mkdir -p core/cache/imageoptimizer
chmod 775 core/cache/imageoptimizer<picture>) imageoptimizer_enabled=1 и imageoptimizer_inject_frontend=1OnWebPagePrerender в спискеsrc у <img> — локальный путь в media source (assets/...), не внешний URLskip_classes, skip_src_pattern, data-imageoptimizer-skiphtml_cache=1 сбросьте HTML-кэш ImageOptimizermax_html_size (1 МБ по умолчанию)curl -s 'https://example.com/page.html' | grep -E '<picture|\.webp'Для страницы с авторизацией откройте её в режиме инкогнито или под гостевой сессией.
src не попадает в media source Inject ищет файл на диске и сопоставляет его с Filesystem media source. Если сопоставление не удалось, <picture> не строится.
На MODX 3 используется fallback sources.modMediaSource при резолве source. Убедитесь, что установлена актуальная версия пакета.
Проверьте:
src указывает на существующий файл: assets/... или /assets/..., не внешний URL и не data:basePath одного из Filesystem sources (часто source 1 с корнем assets/)*.webp / *.avif есть на дискеskip_classes, подстрока thumb3x в URL, data-imageoptimizer-skipПодробнее про skip: Авто-inject и picture.
Текст на странице показывает Д вместо «Д», или появился <!--?xml encoding="UTF-8"-->.
html_parser.php, IMAGEOPTIMIZER_HTML_SERIALIZE_REV = 4)<meta charset="UTF-8"> в шаблонеСмотрите колонку Error / skip_reason:
| Причина | Действие |
|---|---|
| Upscale skip | upscale=0 и картинка меньше breakpoint; включите upscale=1 если нужны «широкие» варианты |
| SvgSkip | SVG не конвертируется |
| AlreadyWebp | Источник уже WebP |
| AnimatedNotSupported | GIF с анимацией |
| MemoryLimit | Увеличьте max_memory_limit, уменьшите breakpoints |
| NonFilesystemSource | Очередь только для Filesystem media source |
imageoptimizer_max_memory_limit → 512M или 768M480,768,1024cron_limit и --limit в CLI--time-budget=3600imageoptimizer-admin.min.js. Сборка из исходников на GitHub без npm run build:mgr даст пустую страницуimageoptimizer-admin.min.jsimageoptimizer_vuetools_required — VueTools не установлен или версия ниже минимумаКоннектор вернул HTML (PHP warning, редирект на login, 404) вместо JSON.
Cmd+Shift+R)connector.php — статус и тело ответаwindow.imageoptimizerConfig.connectorUrl (откройте Пакеты → ImageOptimizer, hard refresh)Путь в диалоге относительно корня media source, не URL сайта:
images/resources, не /images/resourcesassets/images/products/…Dry-run в диалоге считает файлы, не строки очереди (файл × breakpoints × formats).
CLI php -m показывает imagick, а вкладка Server нет: FPM использует другой бинарник и пустой PATH.
valet use php@8.3 / Herd → та же версияpecl install imagickbrew install webp libavif libheif imagemagickphp-fpm.d/valet-fpm.conf (или аналог): env[PATH] = /opt/homebrew/bin:/usr/local/bin:…sudo kill старого php-fpm)Preflight ищет cwebp, avifenc, heif-convert также в /opt/homebrew/bin. Рекомендация: valet use php@X.Y и один php -v для CLI и сокета FPM.
Rebuild по корню assets/ ставит задачи на каждый файл × breakpoints × formats.
Решение: rebuild с узким path (assets/images/catalog), cron с меньшим cron_limit, или остановка и очистка лишних pending через Очистить варианты (осторожно: удаляет файлы вариантов).
Каждый вариант — отдельный файл. Сократите formats, breakpoints или avif_enabled. Настройте disk_warn_gb для раннего предупреждения в UI.
Сообщите о баге с логами и версией PHP: Issues на GitHub.