全部技能 / 基础工具与工作流 / baoyu-compress-image
基础工具与工作流 · JimLiu/baoyu-skills

baoyu-compress-image

Compresses images to WebP (default) or PNG with automatic tool selection. Use when user asks to "compress image", "optimize image", "convert to webp", or reduce image file size.

风险提醒:蓝色 · 知晓即可AI 侦查报告
作者 JimLiuGitHub JimLiu/baoyu-skills ↗Stars 25926许可 MIT(仓库根 LICENSE,Copyright (c) 2026 Jim Liu;GitHub API license.spdx_id=MIT)commit 1567581c26
agent 宿主通常会约束 skill 执行权限;风险提醒为 AI 侦查观点,不构成质量或安全保证。第三方 skill 仅作拆解与展示,安装使用风险自负,版权归原作者。

1实现原理 · 为什么它能做到

核心是“按目标格式自动挑压缩器”:webp 优先 cwebp、其次 ImageMagick 的 convert、最后 sharp;非 webp 在 macOS 直接用 sips,否则 convert,再退 sharp。

skills/baoyu-compress-image/scripts/main.ts
if (await commandExists("cwebp")) return "cwebp";
注:判据是运行平台与 PATH 上的命令,而不是 npm 依赖清单——所以没有 node_modules 也能跑(只要有 cwebp/convert/sips 之一)。

可用性探测靠 which + child_process.spawn,压缩本身也是 spawn 系统 CLI 并解析退出码/stderr。

skills/baoyu-compress-image/scripts/main.ts
const proc = spawn("which", [cmd], { stdio: "pipe" });
注:runCmd 统一收集 stderr,非 0 退出即抛 'sips failed/cwebp failed/convert failed',错误信息来自外部工具。

sharp 作为纯 JS 兜底,用动态 import 延迟加载(前三条路径都不命中时才付出加载成本)。

skills/baoyu-compress-image/scripts/main.ts
const sharp = (await import("sharp")).default;
注:三种格式分别走 pipeline.webp/png/jpeg({ quality });sharp 是唯一会在缺失时导致运行失败的依赖。

写盘用“临时文件 + 原子改名”:先写 output + '.tmp',成功后 rename 到目标名,避免中途失败留下半截文件。

skills/baoyu-compress-image/scripts/main.ts
renameSync(tempOutput, output);
注:同一函数里若未开 --keep 且输入输出不同名,会先把原图改名成 {base}_original{ext} 再落新文件,等于默认保留原图副本(只是改了名)。

默认“转换而非另存”:同目录同基名、换扩展名;开启 --keep 且扩展名相同才输出 {base}-compressed.{ext}。

skills/baoyu-compress-image/scripts/main.ts
return join(dir, `${base}-compressed${ext}`);
注:配合 -o/--output 可指定任意目标路径,此时不做原图改名(absInput !== output 才改名)。

目录模式按扩展名白名单递归收集,逐个处理并汇总体积;单个文件失败只打印错误不中断整批。

skills/baoyu-compress-image/scripts/main.ts
const SUPPORTED_EXTS = [".png", ".jpg", ".jpeg", ".webp", ".gif", ".tiff"];
注:汇总输出形如 'Processed N files: 12MB → 4.1MB (66% reduction)',--json 时输出 files[] + summary。

偏好只在 SKILL.md 层声明(EXTEND.md 三级查找,没找到就用默认格式/质量/保留策略),脚本本身不读配置文件。

skills/baoyu-compress-image/SKILL.md
If none found, use defaults.
注:因此纯 CLI 使用与经 agent 使用的行为一致,差别只在 agent 会按偏好补默认参数。

2核心能力

01自动选择压缩后端(sips / cwebp / ImageMagick / sharp 四级降级)
02格式转换 webp/png/jpeg + 质量参数 (0-100,默认 80)
03单文件与目录批处理(-r 递归,扩展名白名单)
04保留原图策略(-k 走 -compressed 命名;默认把原图改名为 *_original)
05原子写盘(.tmp 中转后 rename),失败不留半成品
06体积对比汇报 + --json 结构化输出
07EXTEND.md 偏好(默认格式/质量/保留原图)与三级路径查找

3外部依赖

类型依赖
clisips(macOS 系统自带图像工具,非 webp 时的首选)
clicwebp(libwebp 官方 CLI,webp 首选)
cliImageMagick convert
cliwhich(命令可用性探测)
packagesharp(动态 import 的纯 JS 兜底;skill 目录无 package.json,依赖运行环境解析)

4风险提醒 风险提醒:蓝色 · 知晓即可

风险提醒:蓝色 · 知晓即可
  • 默认会重命名/覆盖原图位置 — 不指定 -o 时输出与输入同基名,原图被改名 *_original.*;若上游脚本按固定文件名读原图会断链,建议用 -o 或 --keep 明确化。
  • 质量参数语义随压缩机而变 — 同一 --quality 80 在 sips/cwebp/convert/sharp 下未必等价,跨机器结果可能有差异(源码未见 EXIF/ICC 保留策略)。
  • sharp 缺失即失败 — webp 转换在既无 cwebp 也无 convert 时直接依赖 sharp;环境没装 sharp 会报模块解析错误,属环境前置条件而非 skill 缺陷。
  • 无“回滚/删除”能力 — 脚本只改名不删除,长期批量使用会在目录里累积 *_original 文件,需要使用者自行清理策略。
风险提醒:蓝色,知晓即可。(a) 行为全部在本地:spawn 'which' 探测、调 sips/cwebp/convert 压缩、sharp 兜底,读本地图片写本地文件,零网络端点、零凭证读取、零配置文件解析(EXTEND.md 只由 agent 读取)。(b) 需要知情的是文件副作用:不开 --keep 时脚本会把原图 renameSync 为 {base}_original.{ext} 再写新文件,批量目录模式下影响面大,建议先小范围试跑或用 -o 明确输出。(c) 依赖运行环境里的 imagemagick/cwebp/sips/sharp 之一;无 CLI 且无 sharp 时会失败。对照先例:canvas-design / writing-fragments 等本地读写类为 blue。

5第二遍独立确认

  • [ok] 无网络调用 / 无凭证读取 — 全文无 fetch/http/curl/API key/cookie/process.env 命中;唯一子进程是 which 与四个图像 CLI。
  • [ok] “默认覆盖原图”的初判修正 — 第一遍曾疑为删除原图;逐行读后确认为 renameSync(absInput, `${base}_original${ext}`)——原图被改名保留,结论已按此更正写进 risks。
  • [ok] sharp 依赖可解析性 — skill 目录无 package.json;仓库根 dependencies 含 sharp ^0.34.5。非 workspace 环境需自行安装 sharp 或依赖 cwebp/convert/sips 分支。
  • [ok] 四个压缩器的参数与退出码处理 — sips 用 -s format/-s formatOptions/--out;cwebp 用 -q/-o;convert 用 [-quality];sharp 走 pipeline.webp/png/jpeg。均检查 code!==0 并抛错。
  • [ok] 批量容错与汇总 — 目录模式下 processFile 抛错被 catch 后仅 console.error 继续;--json 输出 files[] + summary(compressor/totals/ratio)。
  • [ok] meta 元数据 — GitHub API:MIT、25926 stars、pushed_at 2026-09-10T15:13:43Z;本地 HEAD 与任务 pin 1567581c26ec… 一致。

6结论

  • 环境自适应:装了什么就用什么(cwebp/ImageMagick/sips/sharp),比强制依赖 sharp 的方案更容易一次跑通。
  • 写盘安全:.tmp + rename 原子替换,失败不留半截文件。
  • 批处理省事:目录 -r 递归 + 白名单过滤 + 总量汇总,适合博客/文档站批量瘦身。
  • 零网络零凭证:只需本地文件权限,适合对出网敏感的环境。
  • --json 便于接入流水线。
  • 适合:适合站点/博客批量把大图转 WebP、给交付物瘦身的自动化场景,也适合塞进 agent 工作流做“生成后压缩”这一步(可被其它 baoyu skill 调用)。
    不适合:不适合需要保留 EXIF/ICC 精细控制、或需要 lossless/AVIF 等高级编码的场景;不适合对原文件名有强校验、不允许改名的流水线。
    安装 agent 直装可复制
    ① 本站镜像 更新 2026-09-15
    方式 A · 人下载镜像包下载 baoyu-compress-image.tar.gz
    sha256: 5c0a427092d20497…
    方式 B · JSON 格式安装指南,复制给 agent
    安装指南
    agent 读 JSON 指南后会自动从本站下载安装,无需更多说明。
    ② 上游 GitHub · 原始来源
    能访问 GitHub?直接去上游安装(实时版,可能已更新)GitHub 原始 ↗
    本页镜像锁定 commit 1567581c26;上游为实时仓库。
    来源信息 GitHub 原始
    作者 / 仓库JimLiu / JimLiu/baoyu-skills
    Stars25926
    最近推送2026-09-10
    本 skill commit1567581c26
    许可MIT(仓库根 LICENSE,Copyright (c) 2026 Jim Liu;GitHub API license.spdx_id=MIT)
    本站信息
    收录日期2026-09-06
    分类基础工具与工作流
    侦查报告AI 侦查 · 2 遍 · 2026-09-06
    本站镜像与 GitHub 原始是不同来源:本站锁定 commit 快照经 /r2 分发;GitHub 为实时上游,内容可能已更新。
    同分类邻近