文档

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 有两个许可证层级:FreePro。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-istring--All输入文件或目录(位置的替代)
--output-ostring与源相同All输出目录
--quality--number (1-100)autoAll固定 WebP 质量。覆盖自动质量。
--no-auto-quality--booleanfalseAll使用固定质量 80 而非 SSIM 自动质量。
--recursive-rbooleanfalseAll处理子目录
--concurrency--number (1-32)CPU 核心 - 1Pro并行工作者。在 Free 层级上被忽略。
--dry-run--booleanfalseAll预览文件而不写入
--skip-existing--booleanfalseAll如果 .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 获取版本。

退出代码#

代码名称含义可重试
0Success所有操作成功完成--
1GenericError未分类的错误因情况而异
2UsageError无效 argv(未知标志、缺少参数、错误的值)
3PartialFailure某些文件失败,其他成功否(修复失败的文件)
4AuthError许可证无效、过期或设备限制已超
5NetworkErrorAPI 请求失败或超时
6FreeLimitReached免费层级 20 文件限制已达(文件被跳过)否(升级到 Pro)
75LicenseRevokedMidSessionwatch 会话期间许可证被撤销
76DiskFullwatch 会话:磁盘已满,重试预算耗尽
130SIGINTCtrl+C--
143SIGTERM进程被终止--

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 事件使用带有 eventts 字段的扁平格式(非标准 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_inputconvert未指定输入路径
license_invalidauth许可证密钥未被识别
license_expiredauth, convert许可证已过期
device_limit_exceededauth所有设备插槽均在使用中
activation_failedauth服务器拒绝激活
network_unreachableauth, logout, status无法访问 API 服务器
no_matchesconvert未找到图像
config_write_failedauth, logout无法写入配置
license_revoked_startupany会话开始前许可证已被撤销
license_revoked_mid_sessionwatchwatch 期间许可证被撤销
not_activatedlogout无活跃许可证
device_not_foundlogout设备已解绑
invalid_tokenlogout令牌已过期或已撤销

常见用法场景#

将目录中的所有图像转换为 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-run

CI/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

层级对比#

限制FreePro
每次运行的文件数20无限制
每个文件的延迟3 秒
并行工作者1(串行)自动(CPU 核心 - 1)
最大 --concurrency被忽略32
watch 命令

已知限制#

  1. 输出格式仅为 WebP。 没有转换为其他格式的选项。
  2. 免费层级:每次运行 20 文件限制。 超过限制的文件被跳过,不排队。退出代码 6。
  3. 免费层级:每个文件 3 秒人为延迟。 没有许可证无法绕过。
  4. 免费层级:--concurrency 被忽略。 处理始终是串行的。
  5. 注销需要网络。 使用网络仪表板作为回退。
  6. --json 输出是 NDJSON(流式)。 每行一个 JSON 对象。逐行解析。
  7. 质量限制在 1-100。 无效值静默回退到 80。
  8. 默认质量是自动(SSIM)。 --quality 标志用固定值覆盖它。
  9. 支持 WebP 到 WebP 重新编码,但可能增加文件大小。检查 savedRatio 中的负值。
  10. macOS Gatekeeper 可能阻止未签名的二进制文件。 运行 xattr -cr getwebp 以移除隔离属性。
  11. 输入/输出没有用于图像数据的管道。 输入必须是文件路径;输出始终写入磁盘。

常数(来自源)#

常数
免费层级文件限制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