我用TraeWork新出的Design模式生成了一个桌面宠物

:one: 我是谁 & 遇到什么问题

我是独立开发者,做了一款 macOS 灵动岛工具 TRAE FLOW 参加了创造力大赛,自带桌面宠物功能。痛点:想让用户(包括我自己)能一键生成专属宠物到桌面,并且宠物还能按照TRAE任务状态跟我互动。

:two: 我用了 TraeWork 解决了这件事

模式::check_box_with_check: Design :check_box_with_check: Code

用了 TraeWork 的 Design 模式(WebP 精灵表生成) + 长上下文(一次性理解 9 行动画映射 + 精灵表尺寸约束 + JSON manifest 结构) + 本地文件写入能力。

在 TRAE FLOW 设置页内置了一个「用 TRAE Work Design 生成宠物」卡片([MascotSettingsView.swift](file:///Users/telking/web/ccc/trae-flow/TraeFlow/UI/Views/MascotSettingsView.swift#L197)),流程是:

  1. 点「去 TRAE Work Design 生成」按钮 → 一键激活 TRAE Work CN

  2. 点「复制提示词」拿到一段写好规格的模板,粘到 Design 对话里

  3. 上传宠物图片后把模板里的 [宠物ID] / [中文名] / [类型描述] 三个占位符换成自己的(比如 my-cat / 我的小猫 / 一只橘色像素猫咪,圆脸大眼,尾巴翘起)

  4. Design 模式按规格生成 1536×1872 的 sprite sheet WebP,自动 mkdir -p 并写入 ~/.traeflow/pets/<id>/spritesheet.webp,同时生成 pet.json

  5. 回到 TRAE FLOW,MascotThemeWatcher(DispatchSource)监听到目录变化,新宠物立刻出现在主题包列表,选中即用

:three: 我做出了什么

一条零绘画门槛的自定义宠物工作流——填 3 个字段,2 分钟从想法到一只会在灵动岛上 idle / 跑动 / 招手 / 跳跃 / 沮丧 / 等待 / 工作 / 审视 9 种状态的桌面宠物。

:four: 效果展示

:six:提示词参考:

我要创建一个自定义宠物。请按以下要求直接生成并保存文件。

【宠物信息】
宠物名称[在此填写,如 my-cat]
宠物类型描述:按照我发给你的图片生成
背景:透明

【任务 1:生成宠物表图像并保存到文件】
直接生成一张 WebP 格式的宠物表(sprite sheet),并写入到以下路径:
~/.traeflow/pets/[宠物名称]/spritesheet.webp
如果目录不存在,先用 mkdir -p 创建。

精灵表规格(严格遵循):
- 整图尺寸:1536 × 1872 像素,恰好 8 列 × 9 行
- 每帧大小:192 × 208 像素
- 每行 8 帧,是同一个动画状态的逐帧循环(帧与帧之间有细微差异以形成动画)
- 像素风格,背景透明或纯色填充

9 行状态映射(从上到下,第 0 行为最顶部):
第 0 行 idle     — 宠物原地站立,轻微呼吸起伏(8帧循环)
第 1 行 runRight — 宠物向右跑动的侧面姿态(8帧循环)
第 2 行 runLeft  — 宠物向左跑动的侧面姿态,镜像 runRight(8帧循环)
第 3 行 waving   — 宠物面向前方打招呼(8帧循环)
第 4 行 jumping  — 宠物原地跳跃(8帧循环)
第 5 行 failed   — 宠物表现失败/沮丧(8帧循环)
第 6 行 waiting  — 宠物表现等待/思考(8帧循环)
第 7 行 running  — 宠物工作状态的动态姿态(8帧循环)
第 8 行 review   — 宠物凑近屏幕/审视(8帧循环)

【任务 2:创建 pet.json 并保存到文件】
将以下 JSON 写入到文件 ~/.traeflow/pets/[宠物ID]/pet.json,将 [宠物ID]、[中文名]、[描述] 替换为实际值:

{
  "id": "[宠物ID]",
  "displayName": "[中文名]",
  "description": "[描述]",
  "kind": "animal",
  "frameWidth": 192,
  "frameHeight": 208,
  "fps": 8,
  "animations": {
    "idle": { "row": 0, "frames": 8 },
    "runRight": { "row": 1, "frames": 8 },
    "runLeft": { "row": 2, "frames": 8 },
    "waving": { "row": 3, "frames": 8 },
    "jumping": { "row": 4, "frames": 8 },
    "failed": { "row": 5, "frames": 8 },
    "waiting": { "row": 6, "frames": 8 },
    "running": { "row": 7, "frames": 8 },
    "review": { "row": 8, "frames": 8 }
  }
}

完成后告诉我文件已生成,让我去 TraeFlow 刷新选择。