Командная строка (jpgboost-cli)

jpgboost-cli сжимает ваши изображения без открытия графического интерфейса. Это подходящий инструмент для скриптов, запланированных задач и непрерывной интеграции.

Функция Pro

Ваша лицензия покрывает до двух установок, которыми вы пользуетесь лично. Приложение и CLI каждое считаются отдельной установкой, даже если оба установлены на одном Mac. Они отображаются как устройства в Настройки > Лицензия.

Сервер, на котором работает только CLI для ваших собственных автоматизаций, таких как непрерывная интеграция или запланированная задача, может таким образом занять одно из этих двух мест без необходимости в дополнительной лицензии. Подробнее см. в разделах Лицензия на сервере и Одна лицензия на пользователя.

Для чего нужна командная строка

jpgboost-cli — это автономный исполняемый файл, включённый в JPGBoost.app. Он не зависит ни от локального API, ни от запущенного экземпляра приложения: он напрямую использует тот же движок декодирования и кодирования и, следовательно, создаёт точно такие же файлы, как графический интерфейс.

Это подходящая точка входа всякий раз, когда не должен открываться никакой интерфейс: скрипт командной оболочки, запланированная задача, непрерывная интеграция, обработка большого количества файлов.

Ничего устанавливать не нужно

jpgboost-cli включён в JPGBoost.app. Не требуется ни компиляция, ни установка библиотек, так как он использует компоненты, уже встроенные в приложение.

Сделать команду доступной

Исполняемый файл находится внутри пакета приложения. Вы можете вызывать его напрямую по полному пути:

/Applications/JPGBoost.app/Contents/MacOS/jpgboost-cli --help

Чтобы запускать jpgboost-cli из любой папки, создайте символическую ссылку один раз:

sudo ln -s /Applications/JPGBoost.app/Contents/MacOS/jpgboost-cli \
  /usr/local/bin/jpgboost-cli

jpgboost-cli --help

Поскольку ссылка указывает на пакет, она остаётся действительной после обновления приложения. Примеры на этой странице предполагают такую установку; без неё замените jpgboost-cli на полный путь выше.

Если вы не используете sudo

Вы можете использовать личную папку вместо /usr/local/bin, например ~/bin, если она указана в вашем PATH. Простая альтернатива — добавить псевдоним в ваш ~/.zshrc.

Лицензия на сервере

Машина, на которой работает только CLI, например сервер без графического интерфейса, может быть активирована и управляться без использования JPGBoost.app.

# Идентификатор этой машины через CLI
jpgboost-cli --machine-id

# Первая активация, с токеном, полученным по электронной почте после покупки
jpgboost-cli --activate ACT-XXXX-XXXX-XXXX-XXXX-XXXX

# С этого уже активированного сервера сгенерировать код для добавления другого устройства
jpgboost-cli --add-device

# Присоединиться к лицензии с помощью кода, сгенерированного в другом месте (приложение или другой CLI)
jpgboost-cli --pair XXXX-XXXX

# Получить более новую версию лицензии, если она есть на сервере
jpgboost-cli --sync

# Количество использованных установок / лимит и их список — локальное чтение, без сетевого запроса
jpgboost-cli --devices
Приложение и CLI считаются двумя отдельными установками

Приложение и CLI считаются двумя отдельными установками, даже при использовании на одном Mac. У каждой свой собственный идентификатор установки, и поэтому она занимает одно из двух мест, разрешённых лицензией Pro.

Вы можете использовать свою лицензию по-разному, например с приложением на вашем Mac и CLI на сервере, с приложением и CLI на одном Mac, с приложением на двух разных Mac, или только с CLI на сервере, который никогда не открывает приложение.

Синтаксис и опции

jpgboost-cli <файл...> --output <папка> [опции]
ОпцияФункцияЗначение по умолчанию
--output <папка>Папка назначения, создаётся, если не существуетОбязательно
--quality <1-100>Качество сжатия75
--format <формат>png, jpeg, heic, avif, webp или jxljpeg
--profile <имя>Применяет именованный профиль экспортаНет
--jobs <N>Файлы, обрабатываемые параллельноКоличество ядер
--jsonСтруктурированный вывод JSON вместо читаемого текстаОтключено
--helpПоказывает справку

Первые примеры

# Два файла в WebP, качество 60
jpgboost-cli foto1.jpg foto2.png --quality 60 --format webp --output ./сжато
# foto1.jpg: 4,2 МБ -> 890 КБ (-79%) -> ./сжато/foto1.webp
# foto2.png: 1,8 МБ -> 620 КБ (-66%) -> ./сжато/foto2.webp
#
# Обработано файлов: 2, ошибок: 0.

# Целая папка в AVIF
jpgboost-cli ~/Изображения/экспорт/*.png --format avif --quality 65 --output ~/Изображения/web

Пакетная обработка и параллелизм

Для сотен или тысяч файлов опция --jobs обрабатывает несколько изображений одновременно. Каждый файл декодируется, кодируется и затем освобождается независимо: потребление памяти растёт не с количеством ожидающих файлов, а только со значением --jobs.

# Восемь файлов обрабатываются одновременно
jpgboost-cli ~/Фото/группа/*.jpg --jobs 8 --format webp --output ~/Фото/web

# По одному, чтобы ограничить нагрузку на общей машине
jpgboost-cli ~/Фото/группа/*.jpg --jobs 1 --format webp --output ~/Фото/web
Измеренный прирост

На группе из 12 файлов --jobs 8 оказался примерно в четыре раза быстрее, чем --jobs 1. Реальный прирост зависит от количества ядер вашего Mac и целевого формата: AVIF и JPEG XL заметно медленнее кодируются, чем JPEG или HEIC.

Использование профиля экспорта

Опция --profile повторно использует профиль, созданный в приложении или через API. Она дополняет только то, что вы не указали явно.

# Формат, качество и папка — всё из профиля
jpgboost-cli --profile "Web JPEG" *.png

# Явная папка имеет приоритет, остальное — из профиля
jpgboost-cli --profile "Web JPEG" --output ./доставка *.png

CLI также может напрямую создать или обновить профиль, минуя Настройки или локальный API:

jpgboost-cli --create-profile "Web JPEG" --format jpeg --quality 70 --output ./сжато

--format и --quality обязательны, --output опционален (указанная папка должна уже существовать). Уже используемое имя заменяет существующий профиль вместо создания дубликата — такое же поведение, как во вкладке Профили приложения и локальном API. Требует JPGBoost Pro, как и остальная часть CLI.

Вывод JSON

С опцией --json вывод представляет собой массив JSON, в котором каждый обработанный файл соответствует объекту JSON, той же формы, что и ответы локального API, что облегчает связывание с jq или другим инструментом.

jpgboost-cli *.png --format webp --output ./вывод --json

# Связать с jq: оставить только файлы с ошибкой
jpgboost-cli *.png --format webp --output ./вывод --json \
  | jq '.[] | select(.error != null)'

Доступные поля: path, originalSizeBytes, compressedSizeBytes, ratio, destination и error.

Коды завершения

КодЗначение
0Все файлы обработаны успешно
77Нет действительной лицензии Pro на этой машине
Отличный от нуляХотя бы один файл не удалось обработать; можно использовать напрямую в скрипте или непрерывной интеграции

Файлы с одинаковым именем

Два входных файла с одинаковым базовым именем естественным образом ведут к одному и тому же выходу. a/foto.jpg и b/foto.png, преобразованные в WebP, оба дали бы foto.webp.

JPGBoost не заменяет их: второй получает отдельное имя.

a/foto.jpg  ->  foto.webp
b/foto.png  ->  foto-2.webp

Имена присваиваются в порядке аргументов, независимо от порядка выполнения с --jobs, поэтому результат воспроизводим. То же правило действует в приложении, Быстрых командах, AppleScript и отслеживаемых папках.

Повторение того же экспорта

Это правило касается только коллизий между разными файлами. Повторный экспорт того же файла в ту же папку заменяет его предыдущий вывод, не накапливая foto-2, foto-3 и так далее.

Проверка установки

В любой момент проверьте, что команда отвечает корректно:

jpgboost-cli --help