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 показывает настоящий результат, не трогая диск, а существующий результат никогда не перезаписывается без вопроса.