SVGO

Организация svg на GitHub, автор в package.json - Kir Belevich · лицензия MIT

Ужимает SVG-логотипы и значки для сайта. Агент уберёт из файлов комментарии, метаданные и служебные следы Inkscape или Illustrator и сложит результат в отдельную папку.

macOS · Windows · LinuxНа компьютере, на сервере и в контейнереБесплатно, MIT

✓ Проверено 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

Установить агентом

Для Claude Code, Codex, Hermes и любого агента с терминалом
Установи программу «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 для сверки вида
Объём
Установили и прогнали задачу на тестовых данных
Что именно сделали
  1. Одноразовый контейнер 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.
  2. Скрипт прогона сам сделал четыре SVG: логотип по образцу выгрузки Inkscape с метаданными, скрытым слоем и лишним градиентом, значок по образцу Illustrator со стилями, баннер со скриптом и стрелку в подпапке. Вместе 5 429 байт.
  3. Команда svgo -rf images -o images-opt уменьшила их до 1 781 байта: логотип с 3 583 до 817, значок с 866 до 330, баннер с 565 до 407, стрелку с 415 до 227, подпапка в новой папке сохранилась.
  4. В логотипе не осталось комментариев, метаданных, атрибутов Inkscape, скрытого слоя и лишнего градиента, заголовок title остался. Контрольные суммы исходных файлов не изменились.
  5. rsvg-convert нарисовал каждый файл до и после в PNG, свой декодер сверил пиксели. У логотипа и значка расхождений нет, у баннера отличаются 48 пикселей, не больше чем на 7 из 255 по каналу цвета. У стрелки отличаются 19 пикселей, у 6 из них разница больше 32 из 255.
  6. Набор по умолчанию оставил в баннере тег script и атрибуты onload и onclick. С файлом настроек и плагином removeScripts их не стало. В PNG этот баннер отличался от исходника на те же 48 пикселей не больше чем на 7 из 255, работу скриптов мы не проверяли.
  7. Без -o программа переписала копию логотипа на месте. Файл svgo.config.mjs из папки выше выполнился сам и записал файл-метку, с явным --config этого не было.
  8. Файл с символом , несуществующий файл и пустая папка дали код 1 и понятную ошибку. Удалили программу командой npm uninstall -g svgo, команда больше не находится. Сжатие соединений не открывало. Скрипт сверил каждый результат сам и только после этого напечатал TASK_OK.
ДатаВерсияОбъёмГдеИтог
18.10.20264.1.0задачаконтейнер, Linuxполучилось
18.10.20264.1.0задачаконтейнер, Linuxполучилось
18.10.20264.1.0задачаконтейнер, Linuxполучилось
18.10.20264.1.0задачаконтейнер, Linuxполучилось
18.10.20264.1.0задачаконтейнер, Linuxполучилось

«Проверено» ставим, только когда сами поставили программу и прогнали её на задаче. Сверка ссылок и вывод версии так не называются.

Похожие программы

Программу делают её авторы. Мы сверяем официальные источники и описываем, что ей нужно, но код остаётся чужим. Перед установкой посмотри план агента: что он поставит и что поменяет в системе.