- 人工智能
- AI 应用
- 桌面应用
- 交互助手
【免费下载链接】ClawX
ClawX is a desktop app that provides a graphical interface for OpenClaw AI agents. It turns CLI-based AI orchestration into a desktop experience without using the terminal. China website is https://clawx.com.cn.
ClawX 是一款基于 OpenClaw 的桌面 AI 助手,通过 Electron 提供跨平台(Windows / macOS / Linux)的图形化界面。应用图标看似是一个"放几张图"的小事,但在 Electron 项目中,一套图标往往要同时满足窗口图标、系统托盘、安装包、DMG 等多处消费方的格式要求,且各平台对尺寸、格式、命名甚至"是否允许彩色"都有硬性约束。本文以仓库 resources/icons/README.md 为核心主体,结合 scripts/generate-icons.mjs、electron/main/tray.ts 与 electron-builder.yml 等源码,完整讲解 ClawX 图标目录的职责、必需文件清单、自动/手动生成方法、设计规范,以及图标从 SVG 源文件一路进入安装包与系统托盘的完整链路。
一、资源目录定位:图标从何处来、到何处去
ClawX 将全部平台图标集中存放在仓库的resources/icons/目录下,作为唯一的图标事实来源(single source of truth):
- 源文件:
icon.svg(主图标矢量源)、tray-icon-template.svg(macOS 托盘模板源); - 产物:
icon.icns(macOS)、icon.ico(Windows)、icon.png(通用 512×512 回退)、16x16.png~512x512.png(Linux 尺寸集)、tray-icon-Template.png(macOS 菜单栏 22×22)。
这套布局与 electron-builder.yml 的打包配置一一对应:构建时buildResources: resources指向该目录,extraResources会把resources/整体复制进应用包(to: resources/),并显式排除icons/*.md与icons/*.svg——也就是说打包产物里只保留运行期真正需要的位图/图标文件,矢量源和说明文档不进包,从源码结构看这是为控制安装包体积而做的刻意裁剪。
二、必需文件清单:一张表看清全平台
README 用一张表格定义了目录的"契约"——任何平台缺了对应文件,运行时就会出现回退或显示异常。以下为完整清单:
| 文件 | 平台 | 说明 |
|---|---|---|
icon.svg | 源文件 | 所有图标的矢量来源,1024×1024 画布 |
icon.icns | macOS | Apple Icon Image 格式,供应用包与 DMG 使用 |
icon.ico | Windows | Windows ICO 格式,供窗口、托盘与安装器使用 |
icon.png | 全平台 | 512×512 PNG 回退方案 |
16x16.png~512x512.png | Linux | Linux 桌面环境需要的 PNG 尺寸集 |
tray-icon-template.svg | 源文件 | macOS 托盘模板图标矢量源 |
tray-icon-Template.png | macOS | 22×22 菜单栏状态栏图标(注意文件名必须以Template结尾) |
仓库中 resources/icons 目录的实际文件与清单完全一致(含icon.icns、icon.ico、icon.png、16x16.png~512x512.png、tray-icon-Template.png与两个 SVG 源),说明该清单就是当前仓库正在维护的真实产物集。
三、自动化生成管线:pnpm icons的源码级剖析
README 给出的标准做法是运行生成脚本,仓库里对应的真实实现是 scripts/generate-icons.mjs,并通过 package.json 暴露为 npm 脚本:"icons": "zx scripts/generate-icons.mjs"。日常只需执行:
pnpm icons # 等价于:zx scripts/generate-icons.mjs3.1 依赖与运行环境
脚本第一行是#!/usr/bin/env zx,并import 'zx/globals',因此它依赖三个关键依赖(版本均来自 package.json):
- zx(^8.8.5):提供
$、echo、chalk、fs等全局 API 的脚本运行器; - sharp(^0.34.5):高性能图像处理库,负责 SVG→PNG 光栅化与尺寸缩放;
- png2icons(^2.0.1):从 PNG Buffer 直接生成 ICO / ICNS,免去调用系统工具。
注意:因为脚本以 zx 风格编写并依赖zx/globals注入的全局 API,直接用node scripts/generate-icons.mjs运行会因缺少$、echo等全局对象而报错,官方推荐方式是通过pnpm icons(内部走 zx)执行。(README 中一处示例写作./scripts/generate-icons.sh,另一处写作node scripts/generate-icons.mjs,而仓库实际提供的规范入口是pnpm icons对应的.mjs脚本,后续以仓库实现为准。)
3.2 六步生成流程
脚本的完整流程可归纳为六步,每一步都有对应源码段落(scripts/generate-icons.mjs):
- 读取 SVG 并校验:检查
resources/icons/icon.svg是否存在,不存在则process.exit(1)终止。 - 生成 Master PNG(1024×1024):
sharp(SVG_SOURCE).resize(1024, 1024).png().toBuffer(),得到全流程共享的主位图 Buffer——后续所有格式都以它为基础,保证各平台图标视觉一致。 - 生成
icon.png(512×512):对 Master PNG 缩放 512 并落盘,作为 Electron 根目录通用回退图标。 - 生成 Windows
icon.ico:png2icons.createICO(masterPngBuffer, png2icons.HERMITE, 0, false),直接从 1024 PNG 合成多尺寸 ICO;生成失败时输出红色错误信息。 - 生成 macOS
icon.icns:png2icons.createICNS(masterPngBuffer, png2icons.HERMITE, 0),同样基于 Master PNG。 - 生成 Linux PNG 尺寸集 + macOS 托盘模板:对
[16, 32, 48, 64, 128, 256, 512]逐个resize落盘;随后若存在tray-icon-template.svg,则缩放为 22×22 输出tray-icon-Template.png,缺失时仅打印警告并跳过(脚本不会因此中断)。
其中png2icons的三个缩放算法在脚本注释里有明确说明:1 = Bilinear(较快)、2 = Hermite(均衡)、3 = Bezier(最慢但质量最佳)。ClawX 选择了Hermite(2),在生成速度与质量之间取平衡。
四、环境准备:按平台安装图像工具
虽然.mjs脚本本身只依赖 Node 生态的 sharp/png2icons,不需要外部工具;但若你想手动生成或修改 SVG 后做本地预览,README 给出的按平台依赖如下:
macOS(通过 Homebrew):
brew install imagemagick librsvgLinux(Debian/Ubuntu 系):
apt install imagemagick librsvg2-binWindows:安装 ImageMagick(官方站下载安装包,安装时勾选"加入 PATH")。
其中librsvg(rsvg-convert)负责 SVG→PNG 光栅化,imagemagick负责格式转换与多尺寸合成;若你希望完全脱离外部依赖,则优先使用第三节的pnpm icons管线。
五、手动生成图标:不依赖脚本的三平台方案
README 同时保留了纯手动的生成路径,适合在无法运行 npm 脚本或需要精细控制时使用:
macOS(.icns)
- 先构造一个
.iconset文件夹,内部放入命名规范的 PNG(如icon_16x16.png、icon_32x32@2x.png等); - 执行
iconutil -c icns -o icon.icns ClawX.iconset,由系统自带工具合成 ICNS。
- 先构造一个
Windows(.ico)
- 用 ImageMagick 将多个尺寸的 PNG 一次性合并进单个 ICO:
convert icon_16.png icon_32.png icon_64.png icon_128.png icon_256.png icon.ico
- 用 ImageMagick 将多个尺寸的 PNG 一次性合并进单个 ICO:
Linux(PNGs)
- 分别生成 16、32、48、64、128、256、512 像素的 PNG——这与自动脚本中
linuxSizes数组完全一致,也和 Linux 桌面规范(如 .desktop 入口的Icon=字段)要求的尺寸集吻合。
- 分别生成 16、32、48、64、128、256、512 像素的 PNG——这与自动脚本中
六、设计规范:让图标在每个平台上都"正确"
6.1 主应用图标的设计参数
README 对主图标icon.svg给出三条硬性规范:
- 圆角半径:约为宽度的 20%(在 1024px 画布上约 200px);
- 前景内容:白色爪形符号,带 "X" 点缀(ClawX 品牌元素);
- 安全区:边缘保留 10% 外边距。
对照仓库中的 resources/icons/icon.svg 可以看到实现细节完全落地:画布 1024×1024,白色圆角矩形从 (100,100) 开始、尺寸 824×824、rx="184"——184/824 ≈ 22%,即约 20% 圆角比例,同时x=100恰好就是"10% 安全区";爪形路径用蓝色#007DEB填充,并叠加了feOffset dy="11"+feGaussianBlur stdDeviation="11"(透明度 0.28)的投影滤镜。可见 README 的规范并非泛泛而谈,而是与源文件逐一对应。
6.2 macOS 托盘模板图标的硬性约束(重点)
macOS 菜单栏(状态栏)图标有一套特殊的"模板图像(Template Image)"机制,README 将其总结为四条,任何一条不满足都会导致菜单栏图标显示异常:
- 格式:单色(纯黑)绘制在透明背景上,不允许渐变或彩色;
- 尺寸:22×22 像素(系统会自动处理 @2x 视网膜版本,无需手动提供大图);
- 命名:文件名必须以
Template结尾(如tray-icon-Template.png),macOS 才能自动识别为模板图并据菜单栏深浅色自动反色; - 设计:主图标的简化单色版本,源文件使用
tray-icon-template.svg。
仓库中的 resources/icons/tray-icon-template.svg 即为 22×22 画布、fill="black"(纯黑 #000000)的爪形单色路径,产物tray-icon-Template.png也是 22×22,完全符合上述约束。特别提醒:Windows/Linux 托盘图标可以自由使用彩色,唯独 macOS 模板图标必须保持纯黑透明底。
6.3 命名大小写与"Template"后缀
tray-icon-Template.png中Template首字母大写是刻意约定(macOS 的 template 识别对后缀有要求,源码注释中也强调 "The 'Template' suffix tells macOS to treat it as a template image"),生成脚本输出时严格使用tray-icon-Template.png文件名,切勿改写成小写template。
七、运行时与打包:图标如何被消费
图标不只是"静态文件",ClawX 在主进程里有三处真实的消费逻辑,理解了它们才算掌握图标管线的完整闭环。
7.1 系统托盘图标(electron/main/tray.ts)
托盘创建函数createTray按平台选择图标路径:
| 平台 | 使用的文件 | 原因(源码注释) |
|---|---|---|
| Windows | icon.ico | ICO 在系统托盘显示质量最佳 |
| macOS | tray-icon-Template.png | Template 后缀让 macOS 按模板图自动适配明暗 |
| Linux 及其他 | 32x32.png | 托盘常用小尺寸 PNG |
随后nativeImage.createFromPath加载;若加载结果icon.isEmpty()(文件缺失或损坏),则回退到通用icon.png,并在 macOS 上额外调用icon.setTemplateImage(true)兜底。开发者模式与打包模式通过getIconsDir()区分路径:开发时__dirname/../../resources/icons,打包后process.resourcesPath/resources/icons(对应 extraResources 的复制目标)。
7.2 窗口图标(electron/main/index.ts)
getAppIcon()的逻辑为:macOS 直接返回undefined(依赖 .app 包内图标,BrowserWindow不设 window icon),Windows 使用icon.ico,其余平台使用icon.png,同样以icon.isEmpty()判断是否需要放弃设置。这里再次体现icon.png作为"全平台通用回退"的定位。
7.3 electron-builder 打包配置(electron-builder.yml)
打包侧对图标的使用散落在各平台段落:
mac.icon: resources/icons/icon.icns,且 DMG 段也使用同一icon.icns作为卷标图标;win.icon: resources/icons/icon.ico,NSIS 安装器/卸载器图标同样指向icon.ico;linux.icon: resources/icons(整个目录),electron-builder 会自动从 16~512 尺寸集中挑选生成 AppImage/deb/rpm 所需图标;extraResources将resources/复制到安装包resources/,但排除icons/*.md与icons/*.svg——矢量源不进入最终包,避免冗余体积。
八、更新图标的标准工作流
README 给出的图标更新流程是标准五步,也是每次品牌视觉调整时必须遵守的 checklist:
- 用矢量编辑器(Figma、Illustrator、Inkscape 等)编辑
icon.svg; - 若同时需要调整 macOS 菜单栏图标,编辑
tray-icon-template.svg(必须保持透明底纯黑单色); - 运行图标生成(当前仓库规范入口为
pnpm icons); - 逐一检查生成的各平台产物(尤其注意托盘小尺寸与 ICNS 在 Finder 中的显示);
- 将源文件与全部生成产物一并提交——因为生成脚本以磁盘上的 SVG 为输入,任何一次漏提交生成物都会导致后续构建使用过期图标。
九、常见问题与验证要点
node scripts/generate-icons.mjs直接运行报错?正常现象。脚本是 zx 程序(#!/usr/bin/env zx并导入zx/globals),应通过pnpm icons运行。- macOS 菜单栏图标出现黑块/白块?检查文件是否确实以
Template结尾、是否纯黑单色、是否有渐变或半透明像素(见 6.2)。 - Linux 桌面启动器图标模糊?确认 16~512 全尺寸集齐全,GNOME/KDE 会根据目录扫描多个尺寸择优显示。
- 打包后找不到图标?打包产物中图标位于
process.resourcesPath/resources/icons(由 extraResources 复制),且icons/*.svg与*.md被刻意排除,属预期行为。 - 如何验证整套链路?修改
icon.svg后执行pnpm icons,对比 resources/icons 下全部产物时间戳与尺寸(如file resources/icons/icon.png、icon.icns),再通过pnpm run package:mac/win/linux检查安装包内图标是否符合预期。
综上,ClawX 的图标管线是一个"单一矢量源 → 自动生成全平台格式 → 运行时/打包双路径消费"的完整体系:README 定义了文件契约与设计规范,scripts/generate-icons.mjs 提供了可复现的生成实现,electron/main/tray.ts、electron/main/index.ts 与 electron-builder.yml 则决定了这些文件最终被如何呈现。对于任何 Electron 桌面应用的图标管理,这套"契约清单 + 自动化脚本 + 平台消费点对齐"的思路都值得直接借鉴。
- 人工智能
- AI 应用
- 桌面应用
- 交互助手
【免费下载链接】ClawX
ClawX is a desktop app that provides a graphical interface for OpenClaw AI agents. It turns CLI-based AI orchestration into a desktop experience without using the terminal. China website is https://clawx.com.cn.
相关推荐
跨平台应用图标全攻略:electron-vue图标设计与自动化生成方案
跨平台应用图标全攻略:electron vue图标设计与自动化生成方案 你是否还在为Electron应用的图标适配问题头疼?不同操作系统需要不同尺寸、不同格式的
前端桌面应用Pandas_talib高级应用:MACD、布林带和ATR指标组合策略
Pandas_talib高级应用:MACD、布林带和ATR指标组合策略 Pandas_talib是一个基于Python Pandas的技术分析指标实现库,它提供
跨平台应用图标设计终极指南:Kazumi自适应图标规范与实现技巧
跨平台应用图标设计终极指南:Kazumi自适应图标规范与实现技巧 Kazumi作为一款基于自定义规则的番剧采集APP,支持流媒体在线观看和弹幕功能,其跨平台图标
移动开发桌面应用音视频
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考