GetWebP CLI – LLM 上下文文档
本文档针对需要理解和调用 GetWebP CLI 的 AI 代理(Cursor、Claude、Copilot 等)进行了优化。
GetWebP CLI -- LLM 上下文文档
本文档针对需要理解和调用 GetWebP CLI 的 AI 代理(Cursor、Claude、Copilot 等)进行了优化。版本:1.2.1。
产品描述#
GetWebP CLI 是一个跨平台命令行工具,将图像(JPG、PNG、BMP、WebP)批量转换为优化的 WebP 格式。它作为 macOS (ARM64, x64)、Linux (x64) 和 Windows (x64) 的独立二进制文件分发。二进制文件名为 getwebp。
CLI 有两个许可证层级:Free 和 Pro。Free 层级无需激活即可使用,但限制转换为每次运行 20 个文件,文件之间 3 秒延迟,仅限串行处理。Pro 层级需要通过 getwebp auth <key> 激活许可证,解锁无限制文件、即时处理、并行工作者(最多 32 个并发)和 watch 命令。许可证在 getwebp.com/pricing 购买。
CLI 使用基于 JWT 的离线优先许可。一旦激活,许可证在本地缓存并在没有持久网络连接的情况下工作。status 命令在离线时报告缓存的数据。
原始文件永远不会被修改或删除。输出 WebP 文件默认写入源文件旁边,或写入指定的输出目录。
所有命令支持 --json(别名 -j)以在 stdout 上获得结构化 NDJSON(换行分隔 JSON)事件。人类可读的消息和警告转到 stderr。每个 stdout 行是一个 JSON 对象。
默认情况下,convert 使用 SSIM 自动质量找到与源文件视觉上完全相同的最小 WebP。使用 --quality <N> 指定固定质量,或使用 --no-auto-quality 使用固定质量 80。
命令快速参考#
convert#
getwebp convert [path] [options]
getwebp convert -i <path> [options]
| 标志 | 别名 | 类型 | 默认值 | 层级 | 描述 |
|---|---|---|---|---|---|
<path> (位置) | -- | string | -- | All | 输入文件或目录 |
--input | -i | string | -- | All | 输入文件或目录(位置的替代) |
--output | -o | string | 与源相同 | All | 输出目录 |
--quality | -- | number (1-100) | auto | All | 固定 WebP 质量。覆盖自动质量。 |
--no-auto-quality | -- | boolean | false | All | 使用固定质量 80 而非 SSIM 自动质量。 |
--recursive | -r | boolean | false | All | 处理子目录 |
--concurrency | -- | number (1-32) | CPU 核心 - 1 | Pro | 并行工作者。在 Free 层级上被忽略。 |
--dry-run | -- | boolean | false | All | 预览文件而不写入 |
--skip-existing | -- | boolean | false | All | 如果 .webp 已在输出路径存在则跳过 |
--manifest | -- | string (path) | -- | All | 将 JSON 资源指纹清单写入此路径 |
注意:
-q是全局--quiet的别名,不是--quality的别名。
支持的输入格式:.jpg、.jpeg、.png、.bmp、.webp
输出格式:.webp(始终)
watch(仅限 Pro,v1.2.0+)#
getwebp watch [...paths] [options]
作为前台守护程序运行。按 Ctrl+C 可优雅关闭。
| 标志 | 别名 | 描述 |
|---|---|---|
--output | -o | 镜像输出目录(保留树) |
--quality | -- | 固定质量 1-100 |
--no-auto-quality | -- | 使用固定质量 80 |
--concurrency | -- | 覆盖并行工作者数量 |
--stability-threshold <ms> | -- | 文件稳定性检测窗口(默认 1000ms) |
--backfill | -- | 启动时在监视之前处理现有文件 |
--no-color | -- | 禁用 ANSI 颜色 |
auth#
getwebp auth <license-key> [--json]
激活 Pro 许可证密钥并将其绑定到当前设备。
status#
getwebp status [--json]
显示版本、计划层级、许可证后缀、过期日期和设备使用情况。
logout#
getwebp logout [--force] [--json]
从设备解绑许可证。需要网络。--force 或 --json 跳过交互式确认。
全局标志#
| 标志 | 别名 | 描述 |
|---|---|---|
--version | -V | 打印版本(getwebp/1.2.1) |
--help | -h | 显示帮助 |
--json | -j | 在 stdout 上输出 NDJSON(所有命令) |
--verbose | -v | 详细输出 |
--quiet | -q | 抑制 info 和 warn;错误仍会打印 |
--debug | -- | 调试输出(隐含 --verbose) |
--force | -f | 跳过确认提示 |
重大变更 (v1.2.0):
-v此前是--version的别名,现在是--verbose。请使用-V获取版本。
退出代码#
| 代码 | 名称 | 含义 | 可重试 |
|---|---|---|---|
| 0 | Success | 所有操作成功完成 | -- |
| 1 | GenericError | 未分类的错误 | 因情况而异 |
| 2 | UsageError | 无效 argv(未知标志、缺少参数、错误的值) | 否 |
| 3 | PartialFailure | 某些文件失败,其他成功 | 否(修复失败的文件) |
| 4 | AuthError | 许可证无效、过期或设备限制已超 | 否 |
| 5 | NetworkError | API 请求失败或超时 | 是 |
| 6 | FreeLimitReached | 免费层级 20 文件限制已达(文件被跳过) | 否(升级到 Pro) |
| 75 | LicenseRevokedMidSession | watch 会话期间许可证被撤销 | 否 |
| 76 | DiskFull | watch 会话:磁盘已满,重试预算耗尽 | 否 |
| 130 | SIGINT | Ctrl+C | -- |
| 143 | SIGTERM | 进程被终止 | -- |
NDJSON 输出#
每次 --json 调用都在 stdout 上发出 NDJSON。每行是一个 JSON 事件。
信封(必需字段,所有事件)#
{
"@timestamp": "2026-04-11T10:00:00.123Z",
"@level": "info | warn | error",
"@message": "人类可读摘要",
"@module": "getwebp.<command>",
"type": "<event-type>",
"data": {}
}第一行——版本前言(始终)#
{"@timestamp":"2026-04-11T10:00:00.100Z","@level":"info","@message":"GetWebP CLI 1.2.1","@module":"getwebp.cli","type":"version","data":{"getwebp":"1.2.1","ui":"1"}}convert 事件#
| 事件类型 | 时机 |
|---|---|
convert.completed | 运行完成(成功或部分失败) |
convert.truncated | 免费层级限制已达 |
convert.failed | 整个命令失败(例如缺少输入) |
diagnostic | 警告或补充信息 |
convert.completed 数据#
{
"processed": 3,
"total": 3,
"successCount": 3,
"failedCount": 0,
"results": [
{
"file": "photo.jpg",
"status": "success",
"originalSize": 204800,
"newSize": 133120,
"savedRatio": 0.35,
"saved": "35.0%",
"quality": 78,
"qualityMode": "auto"
}
]
}convert.truncated 数据#
{
"processed": 20,
"skipped": 5,
"limit": 20,
"upgrade_url": "https://getwebp.com/pricing"
}watch 事件#
watch 事件使用带有
event和ts字段的扁平格式(非标准 NDJSON 信封),watch.failed错误事件除外(使用标准信封)。
event 值 | 格式 | 时机 |
|---|---|---|
banner | 扁平 | watcher 就绪时(启动时) |
converted | 扁平 | 文件已转换 |
skipped | 扁平 | 文件已跳过(mtime 或大小) |
heartbeat | 扁平 | 空闲时每 30 秒 |
shutdown | 扁平 | 优雅关闭 |
watch.failed | 标准信封 | 文件或致命错误 |
auth 事件#
| 事件类型 | 时机 |
|---|---|
auth.completed | 激活成功 |
auth.failed | 激活失败 |
status 事件#
| 事件类型 | 时机 |
|---|---|
status.reported | 状态已检索 |
status.failed | 状态检索失败 |
status.reported 数据#
{
"version": "1.2.1",
"plan": "free | pro",
"licenseKeySuffix": "A1B2",
"expiresAt": "2027-04-01T00:00:00.000Z",
"devicesUsed": 1,
"devicesLimit": 5,
"cached": true
}logout 事件#
| 事件类型 | 时机 |
|---|---|
logout.completed | 设备已解绑 |
logout.failed | 解绑失败 |
JSON 错误代码(data.code)#
data.code | 命令 | 含义 | 可重试 |
|---|---|---|---|
missing_input | convert | 未指定输入路径 | 否 |
license_invalid | auth | 许可证密钥未被识别 | 否 |
license_expired | auth, convert | 许可证已过期 | 否 |
device_limit_exceeded | auth | 所有设备插槽均在使用中 | 否 |
activation_failed | auth | 服务器拒绝激活 | 否 |
network_unreachable | auth, logout, status | 无法访问 API 服务器 | 是 |
no_matches | convert | 未找到图像 | 否 |
config_write_failed | auth, logout | 无法写入配置 | 否 |
license_revoked_startup | any | 会话开始前许可证已被撤销 | 否 |
license_revoked_mid_session | watch | watch 期间许可证被撤销 | 否 |
not_activated | logout | 无活跃许可证 | 否 |
device_not_found | logout | 设备已解绑 | 否 |
invalid_token | logout | 令牌已过期或已撤销 | 否 |
常见用法场景#
将目录中的所有图像转换为 WebP#
getwebp convert ./assets -o ./assets-webp使用 NDJSON 输出递归转换#
getwebp convert ./src/images -r -o ./dist/images --json高质量转换,跳过已转换的文件#
getwebp convert ./images --quality 95 --skip-existing预览而不写入磁盘#
getwebp convert ./images --dry-runCI/CD:转换并解析结果#
getwebp convert ./src/images -o ./dist/images --quality 85 --json > out.ndjson
grep '"type":"convert.completed"' out.ndjson | jq '.data.failedCount == 0'监视目录(Pro)#
getwebp watch ./src/images -o ./dist/images以编程方式检查计划#
getwebp status --json | grep '"type":"status.reported"' | jq -r '.data.plan'在 CI 中激活许可证#
getwebp auth "$GETWEBP_LICENSE_KEY" --json | grep '"type":"auth.completed"'从设备停用许可证(非交互式)#
getwebp logout --force --json层级对比#
| 限制 | Free | Pro |
|---|---|---|
| 每次运行的文件数 | 20 | 无限制 |
| 每个文件的延迟 | 3 秒 | 无 |
| 并行工作者 | 1(串行) | 自动(CPU 核心 - 1) |
| 最大 --concurrency | 被忽略 | 32 |
| watch 命令 | 否 | 是 |
已知限制#
- 输出格式仅为 WebP。 没有转换为其他格式的选项。
- 免费层级:每次运行 20 文件限制。 超过限制的文件被跳过,不排队。退出代码 6。
- 免费层级:每个文件 3 秒人为延迟。 没有许可证无法绕过。
- 免费层级:--concurrency 被忽略。 处理始终是串行的。
- 注销需要网络。 使用网络仪表板作为回退。
--json输出是 NDJSON(流式)。 每行一个 JSON 对象。逐行解析。- 质量限制在 1-100。 无效值静默回退到 80。
- 默认质量是自动(SSIM)。
--quality标志用固定值覆盖它。 - 支持 WebP 到 WebP 重新编码,但可能增加文件大小。检查
savedRatio中的负值。 - macOS Gatekeeper 可能阻止未签名的二进制文件。 运行
xattr -cr getwebp以移除隔离属性。 - 输入/输出没有用于图像数据的管道。 输入必须是文件路径;输出始终写入磁盘。
常数(来自源)#
| 常数 | 值 |
|---|---|
| 免费层级文件限制 | 20 |
| 免费层级延迟 | 3000 ms |
| 默认固定质量 | 80 |
| 默认并发性(convert) | CPU 核心 - 1(最小 1) |
| 默认并发性(watch) | max(2, ceil(CPU 核心 / 4)) |
| Watch 心跳间隔 | 30000 ms |
| Watch 稳定性阈值 | 1000 ms |
| 网络心跳超时 | 3000 ms |
| API 超时 | 5000 ms |