哈喽,大家好
我是阿星👋
跟大家分享一下我最近二次开发 peon-pet的一个像素龙虾桌宠——
它会跟着我的 AI 工作状态动起来。
开始任务就“醒来/打字”,完成就“庆祝”,报错就“警戒”。
就蹲在你的屏幕边角,萌萌哒。
已经开源到了github可以直接玩。
原项目在这里
我这次核心不是重写项目,而是改了 UI 素材和事件。下面的看不懂也行,直接把提示词发给AI就行了。
素材怎么做的?
就像这样,我一次出整套像素资源:
待机、启动、打字、庆祝、警戒、报错,
我们做的 36 张是对应 6个状态动画,每个状态6帧。
再给他的工作台来一套固定背景,
哪里不满意就用Touch Edit(AI绘图软件的精准编辑功能)。
再比如工作台这里,
你可以直接给自己的龙虾小屋写一块招牌。
所有文字都可以随便改不用重新作图。
可以看到,已经生成好了。而且因为我们提前对图像命名进行了规定,AI给我们命名的每一张都是符合要求的,素材替换起来就容易多了,
提示词我放这里了。大家可以根据自己的喜好去改成自己的style。
我们的所有图片里的桌子都要保持不变,龙虾的大小方向也不可以的。现在的桌子大小和龙虾大小都是有变化的。我们是用来做assets atlas的。请严格锁定同一角色与同一机位构图(体型/配色/线稿/光照一致,脚底与桌面锚点固定),侧视朝右, 固定机位, 固定缩放, 角色在画面中位置不变, 每组6帧仅做小幅连续动作(相邻帧位移≤3px、姿态平滑过渡),并输出透明背景RGBA PNG(alpha透明,无黑底无黑边)。需要生成的内容如下
公共前缀 P(每张都加):像素风, 16-bit, 可爱小龙虾桌宠, 坐在迷你办公桌前, 3/4 透明背景, 纯像素硬边, 无抗锯齿, 无文字, 无水印, 单帧动画素材,512x512,36 张对应提示词(每张= P + 变化描述)具体如下。
sleeping_01.png:P + 闭眼熟睡, 身体中立姿态, 微弱呼吸感
sleeping_02.png:P + 闭眼熟睡, 身体下沉2像素, 呼吸下压
sleeping_03.png:P + 闭眼熟睡, 身体回到中立, 轻微呼吸上抬
sleeping_04.png:P + 闭眼熟睡, 小气泡鼻息出现, 极轻摆动
sleeping_05.png:P + 闭眼熟睡, 小气泡变大一点
sleeping_06.png:P + 闭眼熟睡, 小气泡消失, 回到中立
waking_01.png:P + 从睡眠到苏醒过渡, 眼睛半睁, 轻微抬头
waking_02.png:P + 眼睛睁开70%, 背部挺直一点
waking_03.png:P + 眼睛完全睁开, 左钳微抬
waking_04.png:P + 伸懒腰开始, 双钳外展
waking_05.png:P + 伸懒腰最高点, 身体上抬2像素
waking_06.png:P + 苏醒完成, 回到清醒待命姿势
typing_01.png:P + 专注敲键盘, 左钳按键, 右钳抬起
typing_02.png:P + 专注敲键盘, 右钳按键, 左钳抬起
typing_03.png:P + 双钳快速交替中间态, 屏幕微亮
typing_04.png:P + 左钳重击键盘, 身体前倾1像素
typing_05.png:P + 右钳重击键盘, 身体前倾1像素
typing_06.png:P + 快速敲击回中立, 持续工作状态
alarmed_01.png:P + 受惊, 眼睛放大, 身体后仰1像素
alarmed_02.png:P + 受惊加强, 双钳抬起防御姿态
alarmed_03.png:P + 红色警报像素闪烁点出现在头顶
alarmed_04.png:P + 警报闪烁第二帧, 身体轻抖
alarmed_05.png:P + 警报闪烁第三帧, 双钳更紧张
alarmed_06.png:P + 警戒待命姿态, 紧张但稳定
celebrate_01.png:P + 开心开始, 嘴角上扬, 双钳上抬
celebrate_02.png:P + 双钳举高, 身体上跳1像素
celebrate_03.png:P + 欢呼最高点, 彩色像素纸屑少量出现
celebrate_04.png:P + 落回中间态, 纸屑下落
celebrate_05.png:P + 再次小幅欢呼, 双钳挥动
celebrate_06.png:P + 庆祝结束, 开心待命姿态
annoyed_01.png:P + 不耐烦, 皱眉, 眼神变窄
annoyed_02.png:P + 生气加强, 左钳叉腰右钳抬起
annoyed_03.png:P + 生气喷气, 头顶小蒸汽像素出现
annoyed_04.png:P + 蒸汽第二帧, 身体微抖
annoyed_05.png:P + 蒸汽第三帧, 怒视前方
annoyed_06.png:P + 生气结束回待命, 仍略不爽
可选三张的提示词
bg.png:像素风桌面地台背景, 柔和渐变与网格, 透明外围, 无角色, 3072x3072
borders.png:像素风发光边框与角标装饰, 透明底, 赛博蓝绿色, 3072x3072
dock-icon.png:像素风小龙虾头像图标, 居中构图, 高对比, 512x512, 透明背景
代码实现
原项目是 peon-pet它不是为龙虾服务的,所以我把角色素材换成像素龙虾风格,
并且把关联事件替换成我们本地openclaw相关的代码
总的来说,就是在 OpenClaw 外围加了一层事件:实时监听会话事件( agents//sessions/.jsonl ),把它们映射成项目状态机并输出( 通过/state )。
比如你现在先git clone这个项目到自己本地
然后对他进行改造前先把下面这个提示词发给他,就可以直接进入状态
你现在在 `peon-pet` 仓库里工作,目标是把它改造成一个可现场演示的 OpenClaw 桌宠。
【目标】
把默认 peon-pet 改成 OpenClaw 生态演示版:
1. 视觉上替换成我提供的小龙虾/桌面组件素材
2. 状态上接到 OpenClaw,会随着工作流状态切换动画
3. 本地能直接启动、看到效果、验证状态联动
4. 不改 OpenClaw 本体代码,只改 peon-pet
【硬约束】
- 这是 OpenClaw 演示项目,不是网页广告项目
- 不要改事件协议设计
- 事件名必须继续沿用:
`SessionStart`
`Stop`
`UserPromptSubmit`
`PermissionRequest`
`PostToolUseFailure`
`PreCompact`
- `renderer/app.js` 的动画语义保持:
`sleeping / waking / typing / alarmed / celebrate / annoyed`
- 如果素材表的行顺序和语义不一致,可以在素材构建阶段重排行,不要改协议含义
- 不要删除已有角色(`orc` / `capybara` / `hello-kitty` 等)
- 不要改 OpenClaw 仓库代码;如果需要 bridge,就只在 peon-pet 内实现
【状态接入要求】
- peon-pet 要接到 OpenClaw 状态
- 优先方案:在 peon-pet 内实现本地 bridge,并暴露 `remoteUrl/state`
- `/state` 返回的数据格式必须符合 `main.js` 里 `syncRemoteSessionsToTracker` 需要的格式:
`sessions: { sid: { timestamp, cwd, event } }`
- `timestamp` 用秒
- 如果 OpenClaw 没有现成 HTTP 接口,可以在 peon-pet 内自己轮询/转换,但不要改 OpenClaw 本身
【素材要求】
- 新增一个角色,例如 `openclaw-demo`
- 在 `main.js` 的 `BUNDLED_CHARS` 里加映射
- 素材最终落到 `renderer/assets/`,至少包括:
`openclaw-demo-sprite-atlas.png`
`openclaw-demo-borders.png`
`openclaw-demo-dock-icon.png`
`openclaw-demo-bg.png`
- 如果我把新素材放到项目根目录或者 `素材包/` 目录,你要自动识别并用它们生成最终资产
- 你选定了哪些素材,必须同步回 `素材包` 的固定文件名,避免“实际显示内容”和“素材包里的文件”不一致
- 如果素材已经有透明背景,就保留透明
- 如果素材是白底/灰底/黑底预览图,就在构建时安全去底,但不要把主体抠坏
- 边框必须完整显示,不能因为裁切只剩碎片
- 台灯/键盘这类组件如果需要,可以单独作为背景组件摆放,但不能和龙虾主体打架
【动画语义】
按下面语义驱动:
1. `sleeping`:空闲/待机
2. `waking`:新会话开始
3. `typing`:用户发起任务/工作中
4. `alarmed`:需要授权或 compact 前提醒
5. `celebrate`:任务成功结束
6. `annoyed`:失败/报错
【工作方式】
- 先检查并确认入口与映射:
`renderer/app.js`
`main.js`
`renderer/assets/*`
- 然后直接修改,不要只给方案
- 如果你发现我放进来的素材名字不规范,不要停下,直接适配
- 如果当前已有窗口在跑,替换后帮我重启到最新版本
- 除非真有阻塞,否则不要反复问我确认
【必须执行的验证】
1. 依赖:
`npm install`(如果已装就说明已装)
2. 测试:
`npm test`
3. 启动:
`npm run dev -- --character openclaw-demo --spawn-test`
如果是 remote 模式,按你接入后的实际命令启动
4. 状态联动验证:
至少验证 3 类事件触发后的动画变化
5. 如果 bridge 或状态拉取失败,要继续修到能演示为止
【输出格式】
最后只按下面格式给我结果:
- 本轮改动
- 素材替换映射(旧 -> 新)
- OpenClaw 状态联动验证结果
- 启动命令
- 未完成项(如果有)
直接开始做,不要停在分析。
然后把星流AI刚生成的这些新素材替换进项目资源。
然后启动程序,你就会看到openclaw 一开工龙虾就打字,
任务完成就庆祝,
工具报错或权限请求/拦截就告警,
高颜值桌宠从装饰
变成了实时工作状态面板。
如果你还想给你的小龙虾做几套皮肤,
只用让星流AI给它更换不同版本的提示词。
百变龙虾就来啦~
总之先出一版像素 UI,再接现有项目逻辑,
就可以让自己的龙虾安家啦。
ok我是阿星,更多AI应用,我们下期再见!