SVGO
Организация svg на GitHub, автор в package.json - Kir Belevich · лицензия MIT
Ужимает SVG-логотипы и значки для сайта. Агент уберёт из файлов комментарии, метаданные и служебные следы Inkscape или Illustrator и сложит результат в отдельную папку.
✓ Проверено 18.10.2026: Ubuntu 24.04 в одноразовом контейнере Docker на сервере, от root: Node.js 22.23.3, SVGO 4.1.0 из npm в папку $HOME/.npm-global, rsvg-convert 2.58.0 для сверки вида. Что именно проверяли
Какую задачу решает
Переписывает файл SVG так, чтобы он стал меньше, а картинка по возможности осталась прежней: убирает комментарии, метаданные, служебные атрибуты векторных редакторов и скрытые элементы, округляет числа, записывает пути короче. Окон у программы нет, агент запускает одну команду на файл или папку.
- Ужимает папку SVG вместе с подпапками в новую папку (-rf и -o). В прогоне четыре тестовых файла ужались с 5 429 до 1 781 байта, исходники не изменились.
- Убирает следы векторных редакторов. Из тестового файла по образцу выгрузки Inkscape ушли XML-объявление, комментарии, DOCTYPE, блок metadata, атрибуты inkscape и sodipodi, скрытый слой и неиспользуемый градиент, а заголовок title остался.
- С файлом настроек и плагином removeScripts удаляет из SVG скрипты и атрибуты событий onload и onclick. В наборе по умолчанию этого плагина нет.
- С --multipass программа проходит файл несколько раз: в прогоне логотип ужался с 817 до 810 байт. Число знаков после запятой задаёт -p. Если вместо имени файла после -o поставить одну чёрточку (-o -), результат печатается в терминал.
Пример результата
Говоришь агенту
Ужми все SVG из папки images вместе с подпапками для сайта, исходники не трогай. Результат сложи в images-opt, сверь вид и скажи, сколько сэкономили.
Что получится
Мы прогнали этот сценарий на четырёх тестовых файлах: логотипе по образцу выгрузки Inkscape, значке по образцу Illustrator, баннере и стрелке в подпапке. Команда svgo -rf images -o images-opt уменьшила их с 5 429 до 1 781 байта, логотип с 3 583 до 817 байт. Отдельная проверка нарисовала каждый файл до и после в PNG: у логотипа и значка пиксели совпали, у баннера отличались 48 пикселей из 614 400, у стрелки 19 из 36 864. Контрольные суммы исходных файлов не изменились.
Паспорт
- Кто делает
- Организация svg на GitHub, автор в package.json - Kir Belevich
- Сайт
- svgo.dev
- Исходный код
- github.com/svg/svgo
- Инструкция
- svgo.dev/docs/introduction
- Лицензия
- MIT
- Версия
- 4.1.0 на 18.10.2026
- Системы
- macOS · Windows · Linux
- Где работает
- На компьютере, на сервере и в контейнере
- Цена
- Бесплатно
- Проверка
- Проверено 18.10
Установить агентом
Установи программу «SVGO». Работай по шагам и после каждого коротко говори, что сделал.
Что это за программа (каталог smyslokod.ru, официальные источники сверены 18.10.2026):
- официальный сайт: https://svgo.dev/
- исходный код: https://github.com/svg/svgo
- инструкция по установке: https://svgo.dev/docs/introduction/
- актуальная версия на 18.10.2026: 4.1.0
- лицензия: MIT
- для работы нужно (обязательно): Node.js 16 или новее - программа написана на JavaScript и работает на Node.js, в пакете npm указано не ниже 16. Мы проверяли на Node.js 22
Правила:
1. Ничего не устанавливай и не меняй, пока я не скажу «да» на твой план.
2. Ставь только способами из этого промпта. Сторонние сборки, скрипты с форумов и из чужих репозиториев не бери.
3. Мои проекты не трогай: не меняй их файлы, виртуальные окружения и списки зависимостей (package.json, requirements.txt, pyproject.toml).
4. Команды с sudo, правку профиля оболочки (~/.zshrc, ~/.bashrc) и переменной PATH делай только после моего отдельного «да» на каждую.
5. Не проси у меня пароли и ключи и не выводи их. Если нужен пароль администратора, дай команду, я выполню её сам.
6. Всегда пиши результат в новую папку или новый файл через -o. Переписывать исходники на месте можно только после «да» человека и после копии.
7. Запускай svgo с ключом --config и своим файлом настроек. Чужой файл svgo.config.* в папке проекта или выше сначала покажи человеку и жди «да».
8. SVG для сайта из чужих источников ужимай с плагином removeScripts.
9. После сжатия сверь вид каждого файла с исходником, например переведи оба в PNG и сравни.
Шаги:
0. Определи, где ты работаешь: мой компьютер, сервер или контейнер. Какая система и процессор, какие менеджеры пакетов есть (Homebrew, apt, winget, uv, pipx). Ставить нужно туда, где ты сам запускаешь команды.
- на компьютере: ужать логотипы и значки сайта или макета перед выкладкой.
- на сервере: ужимать SVG при сборке сайта, без окон и вопросов в терминале.
- в контейнере: мы проверяли в контейнере Ubuntu 24.04 от root, установка по нашему замеру заняла 4 секунды.
1. Проверь, не стоит ли программа уже: svgo --version ; which -a svgo. Если стоит и запускается, ничего не ставь и переходи к шагу 5.
2. Проверь, что есть всё нужное для работы: Node.js 16 или новее. Чего нет, внеси в план отдельным пунктом. Проверь свободное место на диске: нужно В нашем прогоне пакет npm с зависимостями занял 7 970 241 байт. Node.js ставится отдельно, если его ещё нет. Сколько займёт установка через Homebrew вместе с Node.js, мы не мерили..
3. Составь план: каким одним способом из списка ниже будешь ставить, что появится на диске и сколько места займёт, что поменяется в системе и как потом удалить. Покажи план и жди моего «да».
Способы из официальных источников:
- macOS, Homebrew: brew install svgo (формула того же проекта: в ней указан адрес svgo.dev и архив github.com/svg/svgo, на 18.10.2026 ставит 4.1.0 и тянет за собой Node.js. Ни установку, ни удаление через Homebrew мы не проверяли)
- Любая система, npm: npm install -g svgo@4.1.0 (в прогоне мы ставили эту версию в папку пользователя: перед командой задали NPM_CONFIG_PREFIX=$HOME/.npm-global и добавили $HOME/.npm-global/bin в PATH, npm вывел «added 19 packages in 4s». Удаляли командой npm uninstall -g svgo с той же настройкой. README даёт команду npm install -g svgo без номера версии, она ставит последний выпуск)
4. Установи по согласованному плану. Если что-то идёт не так, как в плане, остановись и спроси.
5. Проверь результат:
- svgo --version: программа запускается без ошибки;
- Сделай во временной папке четыре тестовых SVG: логотип по образцу выгрузки Inkscape, значок по образцу Illustrator, баннер со скриптом и стрелку в подпапке. Ужми папку командой svgo -rf images -o images-opt, сверь размеры, проверь, что служебные следы редакторов ушли, нарисуй каждый файл до и после в PNG и сверь пиксели. Проверь, что исходники не изменились, что скрипты убирает только removeScripts, и коды ошибок на испорченном файле. Делай это во временной папке и не трогай мои файлы.
export NPM_CONFIG_PREFIX=$HOME/.npm-global && mkdir -p $NPM_CONFIG_PREFIX && export PATH=$NPM_CONFIG_PREFIX/bin:$PATH
npm install -g svgo@4.1.0
svgo --version
cd /work && python3 svgtool.py make images
find images -type f | sort | xargs sha256sum > src.sha
svgo -rf images -o images-opt
find images -type f | sort | xargs sha256sum | diff - src.sha
mkdir -p png && rsvg-convert -z 4 -f png -o png/logo-src.png images/logo.svg && rsvg-convert -z 4 -f png -o png/logo-opt.png images-opt/logo.svg
python3 svgtool.py cmp png/logo-src.png png/logo-opt.png
mkdir -p cfg && printf "export default { multipass: true, plugins: ['preset-default', 'removeScripts'] };\n" > cfg/safe.config.mjs
svgo --config cfg/safe.config.mjs images/banner.svg -o banner-safe.svg
svgo --multipass images/logo.svg -o logo-multi.svg
svgo -p 1 images/logo.svg -o logo-p1.svg
svgo images/sub/arrow.svg -o - > arrow-stdout.svg
mkdir -p inplace && cp images/logo.svg inplace/logo.svg
svgo inplace/logo.svg
svgo -rf images-opt -o images-opt2
svgo broken/bad.svg -o broken-out.svg
svgo images/none.svg -o none-out.svg
mkdir -p empty && svgo -f empty -o empty-out
mkdir -p /work/proj/deep && cp images/icon.svg /work/proj/deep/icon.svg
printf "import fs from 'fs'; fs.writeFileSync('/work/config-was-run.txt', 'config executed'); export default { plugins: ['preset-default'] };\n" > /work/proj/svgo.config.mjs
cd /work/proj/deep && svgo icon.svg -o icon-out.svg
test -s /work/config-was-run.txt && rm /work/config-was-run.txt
cd /work/proj/deep && svgo --config /work/cfg/safe.config.mjs icon.svg -o icon-out2.svg
test ! -e /work/config-was-run.txt
npm uninstall -g svgo
- если ты работаешь в папке моего проекта, покажи git status: от установки в проекте не должно появиться изменений.
6. Итог одним сообщением: что установлено, какой версии и куда, сколько места заняло, что поменялось в системе и как всё удалить (macOS, Homebrew: brew uninstall svgo; npm: npm uninstall -g svgo).
Если на любом шаге ошибка, не чини наугад: покажи текст ошибки и скажи, что, по-твоему, случилось. Частые проблемы: https://smyslokod.ru/cli/svgo#problemyПромпт собран из официальных инструкций, сверенных 18.10.2026. Агент сначала проверит, что уже стоит, покажет план с местом на диске и способом удаления и без твоего «да» ничего не поставит.
Как ставят вручную
Способы из официальных источников, у каждого ссылка на первоисточник.
macOS · Homebrew · источник
brew install svgo
формула того же проекта: в ней указан адрес svgo.dev и архив github.com/svg/svgo, на 18.10.2026 ставит 4.1.0 и тянет за собой Node.js. Ни установку, ни удаление через Homebrew мы не проверяли
Любая система · npm · источник
npm install -g svgo@4.1.0
в прогоне мы ставили эту версию в папку пользователя: перед командой задали NPM_CONFIG_PREFIX=$HOME/.npm-global и добавили $HOME/.npm-global/bin в PATH, npm вывел «added 19 packages in 4s». Удаляли командой npm uninstall -g svgo с той же настройкой. README даёт команду npm install -g svgo без номера версии, она ставит последний выпуск
Как удалить
- macOS, Homebrew:
brew uninstall svgo - Любая система, npm:
npm uninstall -g svgo
Что нужно для работы
- Node.js 16 или новее (обязательно) - программа написана на JavaScript и работает на Node.js, в пакете npm указано не ниже 16. Мы проверяли на Node.js 22
Системы
- macOS - ставится через npm или Homebrew, нужен Node.js. На Mac мы не проверяли.
- Windows - ставится через npm, нужен Node.js. На Windows мы не проверяли.
- Linux - мы проверяли на Ubuntu 24.04 через npm с Node.js 22.
Где запускать
Ставить нужно туда, где работает агент: на твой компьютер, сервер или в контейнер.
- На компьютере - ужать логотипы и значки сайта или макета перед выкладкой.
- На сервере - ужимать SVG при сборке сайта, без окон и вопросов в терминале.
- В контейнере - мы проверяли в контейнере Ubuntu 24.04 от root, установка по нашему замеру заняла 4 секунды.
Сколько ресурсов нужно
- Место на диске
- В нашем прогоне пакет npm с зависимостями занял 7 970 241 байт. Node.js ставится отдельно, если его ещё нет. Сколько займёт установка через Homebrew вместе с Node.js, мы не мерили.
- Память
- Память мы не мерили. Тестовые файлы были по нескольку килобайт, при первом сжатии папки программа сообщила от 2 до 16 мс на файл.
- Видеокарта
- В нашем прогоне видеокарта не понадобилась.
- Сеть
- Для установки нужна сеть: npm скачивает пакеты с registry.npmjs.org, этот адрес работает через Cloudflare, доступ из России мы не проверяли. В прогоне netwatch записал адреса registry.npmjs.org и DNS контейнера 127.0.0.11. Отдельно apt ходил к archive.ubuntu.com, security.ubuntu.com и deb.nodesource.com: этот источник Node.js прописан в образе песочницы, а сами пакеты нужны были нашей проверке, не программе. Сжатие папки из прогона шло без соединений. Файл настроек и свои плагины - это код JavaScript, выйдет ли он в сеть, зависит от этого кода.
Лицензия и платные замены
Лицензия MIT. Пользоваться можно бесплатно, и лично, и в работе компании. Кто распространяет копии программы, сохраняет уведомление об авторских правах и текст разрешения. Текст лицензии
Цена: Бесплатно. Программа бесплатная, лицензия MIT.
Платные замены
Платную консольную программу для SVG мы не сверяли.
Бесплатные замены
- SVGOMG - Страница в браузере для тех, кому удобнее настраивать сжатие мышкой. Автор в README называет её недостающим окном для SVGO, которое должно открыть большинство его настроек.
- oxipng - Консольная программа для PNG из нашего каталога, лицензия MIT. Пересобирает файл так, что пиксели остаются те же. Подойдёт, если значок или логотип хранится в PNG.
- ImageMagick - Консольная программа для растровых картинок из нашего каталога, бесплатная по своей лицензии. Уменьшает картинки сайта до нужной ширины и переводит в WebP целой папкой.
О чём помнить
- Безопасность. Агент запускает svgo в терминале сам (exec). Программа читает файлы, которые ей передали, а с ключами -rf все файлы .svg в папке и подпапках (read). Пишет результат по пути из -o, папки для него создаёт сама (write). Без -o программа записывает результат поверх исходного файла, вернуть исходник можно только из заранее сделанной копии (acts). Если ключа --config нет, svgo ищет svgo.config.js, svgo.config.mjs или svgo.config.cjs в текущей папке и во всех папках выше и выполняет найденный файл как код JavaScript (exec). Такой код может читать, менять и удалять файлы с правами пользователя. В прогоне файл настроек из папки выше сработал сам, а с явным --config нет. Сжатие папки из прогона сеть не открывало. Входа в учётные записи и ключей программа не просит.
- Набор по умолчанию скрипты в SVG оставляет. В прогоне тег script и атрибуты onload и onclick остались, ушла только ссылка javascript:. Если SVG пришёл из чужих рук и пойдёт на сайт, добавь плагин removeScripts в файл настроек. По документации плагин ломает SVG, которым скрипты нужны для работы.
- Сжатие меняет запись картинки. В прогоне у логотипа и значка пиксели совпали, у стрелки 19 пикселей из 36 864 отличались, самое большое расхождение 62 из 255 по одному каналу цвета. По справке ключ -p задаёт число знаков после запятой, и чем оно меньше, тем грубее координаты. Сверь вид важного файла до выкладки.
- Набор по умолчанию меняет то, на что может опираться CSS сайта. По справке программы плагин cleanupIds убирает неиспользуемые id и укорачивает используемые, inlineStyles переносит стили из тега style в атрибуты. В прогоне у значка пропали тег style, классы и id. Если сайт меняет цвет значка по классу или id, отключи эти плагины в файле настроек и проверь результат.
Частые проблемы
SvgoParserError: broken/bad.svg:1:73: Invalid character entity
В файле символ, который XML запрещает (в прогоне ). По описанию выпуска 4.1.0 такие файлы теперь дают ошибку разбора. В прогоне код выхода 1, файл результата не записан. Найди и убери символ в строке и столбце из сообщения или пересохрани файл в редакторе.
Error: No SVG files have been found in 'empty' directory.
В папке, переданной через -f, нет файлов с расширением .svg. Код выхода 1. Проверь путь. Если файлы лежат в подпапках, добавь -r.
Error: Error: no such file or directory 'images/none.svg'.
Файла по этому пути нет. Код выхода 1. Проверь путь и имя файла.
Проверка
✓ Проверено 18.10.2026: Ubuntu 24.04 в одноразовом контейнере Docker на сервере, от root: Node.js 22.23.3, SVGO 4.1.0 из npm в папку $HOME/.npm-global, rsvg-convert 2.58.0 для сверки вида.
- Когда
- 18.10.2026
- Среда
- Ubuntu 24.04 в одноразовом контейнере Docker на сервере, от root: Node.js 22.23.3, SVGO 4.1.0 из npm в папку $HOME/.npm-global, rsvg-convert 2.58.0 для сверки вида
- Объём
- Установили и прогнали задачу на тестовых данных
- Что именно сделали
- Одноразовый контейнер Ubuntu 24.04 без данных и ключей. Задали NPM_CONFIG_PREFIX=$HOME/.npm-global, добавили его папку bin в PATH и поставили svgo@4.1.0 командой npm install -g, npm вывел «added 19 packages in 4s», svgo --version вывел 4.1.0.
- Скрипт прогона сам сделал четыре SVG: логотип по образцу выгрузки Inkscape с метаданными, скрытым слоем и лишним градиентом, значок по образцу Illustrator со стилями, баннер со скриптом и стрелку в подпапке. Вместе 5 429 байт.
- Команда svgo -rf images -o images-opt уменьшила их до 1 781 байта: логотип с 3 583 до 817, значок с 866 до 330, баннер с 565 до 407, стрелку с 415 до 227, подпапка в новой папке сохранилась.
- В логотипе не осталось комментариев, метаданных, атрибутов Inkscape, скрытого слоя и лишнего градиента, заголовок title остался. Контрольные суммы исходных файлов не изменились.
- rsvg-convert нарисовал каждый файл до и после в PNG, свой декодер сверил пиксели. У логотипа и значка расхождений нет, у баннера отличаются 48 пикселей, не больше чем на 7 из 255 по каналу цвета. У стрелки отличаются 19 пикселей, у 6 из них разница больше 32 из 255.
- Набор по умолчанию оставил в баннере тег script и атрибуты onload и onclick. С файлом настроек и плагином removeScripts их не стало. В PNG этот баннер отличался от исходника на те же 48 пикселей не больше чем на 7 из 255, работу скриптов мы не проверяли.
- Без -o программа переписала копию логотипа на месте. Файл svgo.config.mjs из папки выше выполнился сам и записал файл-метку, с явным --config этого не было.
- Файл с символом , несуществующий файл и пустая папка дали код 1 и понятную ошибку. Удалили программу командой npm uninstall -g svgo, команда больше не находится. Сжатие соединений не открывало. Скрипт сверил каждый результат сам и только после этого напечатал TASK_OK.
| Дата | Версия | Объём | Где | Итог |
|---|---|---|---|---|
| 18.10.2026 | 4.1.0 | задача | контейнер, Linux | получилось |
| 18.10.2026 | 4.1.0 | задача | контейнер, Linux | получилось |
| 18.10.2026 | 4.1.0 | задача | контейнер, Linux | получилось |
| 18.10.2026 | 4.1.0 | задача | контейнер, Linux | получилось |
| 18.10.2026 | 4.1.0 | задача | контейнер, Linux | получилось |
«Проверено» ставим, только когда сами поставили программу и прогнали её на задаче. Сверка ссылок и вывод версии так не называются.
Похожие программы
- oxipngСжимает PNG без потери качества перед выкладкой на сайт. Агент ужмёт снимки экрана, значки и баннеры, уберёт служебные метаданные и сложит результат в отдельную папку.
- ImageMagickСжимает картинки и переводит их в WebP, меняет размер, делает обложки с надписью и водяные знаки. Агенту нужна, чтобы обработать всю папку картинок сайта за один раз.
Программу делают её авторы. Мы сверяем официальные источники и описываем, что ей нужно, но код остаётся чужим. Перед установкой посмотри план агента: что он поставит и что поменяет в системе.