Skip to content

MediaToolz ​

Набор CLI-команд для изображений: пакетно менять размер, конвертировать и пережимать их по правилам и генерировать для них компактные плейсхолдеры. Один бинарник, одна подкоманда на задачу, каждая безопасна по умолчанию — сначала предпросмотр, перед любой перезаписью бэкап.

Пакет начинался как часть DevToolz и отделён от него начиная с DevToolz 0.5.0. Команды, флаги и настройки те же; см. Переход с DevToolz.

Возможности ​

  • image-hash — генерирует плейсхолдеры hazehash, blurhash и/или thumbhash для растровых изображений. Принимает файлы и/или директории (в том числе через запятую), -r заходит в поддиректории. По умолчанию печатает в stdout; -o собирает всё в один файл, --per-file/--out-dir пишут файл на изображение (photo.jpg → photo.jpg.blurhash.txt, переименовать можно через --suffix и --out-ext). Форматы: json, plain (только текст хеша), csv и модули ts/js для импорта. Нужна нативная библиотека sharp, которую команда предлагает установить при первом запуске.
  • image-batch — создаёт уменьшенные, сконвертированные и пережатые версии растровых изображений пачками по правилам из переиспользуемой конфигурации или из флагов: размеры по ширине, высоте, рамке, длинной или короткой стороне, мегапикселям или процентам, масштабы, форматы (jpg, png, webp, avif, gif, tiff, heif), необязательный предел размера каждого файла, параметры кодеков вроде качества, mozjpeg или палитры png и имена файлов по шаблону ({dir}/{name}-{width}w.{format}). В конфигурации только правила; папки выбираются при каждом запуске. Результаты идут в отдельную папку (-o), рядом с каждым исходником (--beside) или поверх самих исходников (--replace), чтобы уменьшить или пережать оригиналы на месте, — под защитой подтверждения, резервной копии с журналом, правила «заменять только если стало меньше» и image-batch restore, а --dry-run показывает настоящие размеры до и после. -r обходит подпапки, --select выбирает файлы из интерактивного списка, --list только печатает их. Уже существующий результат пропускается, если его сделал прошлый запуск, а в остальных случаях задаётся вопрос. --emit пишет манифест с размерами и, по желанию, плейсхолдерами hazehash. init создаёт конфигурации, а config правит, копирует и удаляет их. Нужна нативная библиотека sharp, которую команда предлагает установить при первом запуске.
  • ui — запускает локальный веб-интерфейс и открывает его в браузере, чтобы обе команды можно было запускать через формы, таблицы и предпросмотр вместо флагов: image-hash с галереей плейсхолдеров, декодированных рядом с каждым изображением, image-batch с конфигурациями, пресетами резкости с предпросмотром «до и после» и бэкапами. Сервер слушает только этот компьютер, под одноразовым токеном, и ничего не пишется без явного выбора.

image-hash пишет файлы только когда вы указали вывод (-o, --per-file, --out-dir), а иначе печатает в stdout. image-batch пишет в папку, заданную -o, или рядом с исходниками при --beside, а поверх оригиналов — только при --replace, после подтверждения и с бэкапом, который можно восстановить. Каждая команда поддерживает --json для машиночитаемого вывода.

Вывод и цвета ​

Обе команды раскрашивают вывод одной общей палитрой: пути голубым, имена и виды жёлтым, проблемы жирным красным, то, что команда сделала бы, жирным жёлтым, а то, что сделала, жирным зелёным; подсказки приглушены, а упомянутые в них флаги (--dry-run, --yes) выделены голубым.

Цвет включён в настоящем интерактивном терминале и сам отключается, когда вывод перенаправлен, задана CI или NO_COLOR либо TERM=dumb. Переопределяют это четыре вещи:

  • --color (или FORCE_COLOR=1) включает его всё равно — для mediatoolz … --color | less -R или CI-лога, который отображает ANSI.
  • --plain отключает цвет, баннер и весёлые фразы разом.
  • --quiet убирает только баннер и вывод чистого прогона; цвет остаётся.
  • --json печатает отчёт как данные, вообще без оформления.

Текст одинаков с цветом и без него — добавляются только escape-коды, так что раскрашенный лог читается нормально и после их удаления.

Как это работает ​

Тяжёлую работу — декодирование, изменение размера, повышение резкости и кодирование — выполняет sharp, который идёт вместе с пакетом и загружается только тогда, когда есть что обрабатывать. Алгоритмы плейсхолдеров (hazehash, blurhash, thumbhash) — небольшие пакеты на чистом JavaScript. Размеры и имена файлов вычисляются до записи чего-либо, поэтому --dry-run показывает настоящий результат, не трогая диск, а существующий результат никогда не перезаписывается без вопроса.