GUIDE / 使用手册

如何驯养
你的桌面宠物

Every setting, rule, and package — explained.

从第一次打开控制面板,到写出一条属于你的规则,再到打包一份可以分享的宠物包——这里是 Desktop Pet 的完整说明书。

SCROLL

01 / GETTING STARTED

快速开始

两分钟认识你的新桌面伙伴

Desktop Pet 有两种运行方式:直接使用打包好的安装包(下载后双击安装,打开即可使用),或者在开发模式下运行 npm run dev 以 Electron 方式启动。

首次启动后,你会在桌面角落看到一个 320×320、透明背景、无边框、默认置顶 的宠物窗口。它安静地待在那里,不会抢占你的任务栏或窗口切换列表。

  1. 启动应用 —— 打开安装好的 App,或执行 npm run dev
  2. 找到你的宠物 —— 它会出现在屏幕角落,直接拖拽即可移动到任意位置。
  3. 打开控制面板 —— 右键点击宠物(默认规则)或使用系统托盘图标。
  4. 导入或补全宠物包 —— 在控制面板左侧点击「资源」,下载 示例宠物包 后导入;也可以在默认创建的宠物包里继续添加你自己的素材。
  5. 调整设置 —— 面板左侧分区:资源、动画、规则、显示、系统。
  6. 保存即生效 —— 配置会写入本地文件,宠物窗口实时重新加载,无需重启应用。
Tip 所有配置都保存在本机的 config.json 中,不会上传到任何服务器;控制面板是一个独立的 960×680 标准窗口,和宠物窗口完全分离,关闭面板不会影响宠物的显示。

02 / OVERVIEW

界面总览

状态速览和调试规则最有用的一页

「总览」是排查问题的第一站。它是只读页面,不在这里改配置,而是把当前宠物包、规则数量、资源数量、显示状态和运行时事件集中放在一起,让你先判断「系统有没有收到事件、规则有没有命中、动画有没有切过去」。

顶部统计

显示当前宠物包 ID、规则数量和资源数量。导入 petpack 或新增素材后,可以先看这里确认数量有没有变化。

当前显示设置

展示缩放、透明度、置顶显示和鼠标穿透状态。特别是鼠标穿透:开启后点击、拖拽等规则不会再被宠物窗口捕捉。

当前动画

正在播放的动画名称和缩略图预览,用来确认动作有没有真的切换。

最近触发规则

最近命中的规则名称、执行的动作摘要,以及触发时间,一眼看出是哪条规则生效了。

事件历史

最近 8 条事件(来自最近 40 条事件的循环缓冲区),用来确认点击、拖拽、鼠标移动等操作有没有被系统捕捉到。

举个例子:如果你配置了一条「鼠标靠近 3 秒后打招呼」的规则却没反应,先看「事件历史」里有没有「鼠标移动」或「鼠标静止」;如果没有,通常是鼠标穿透开启了、窗口没有捕捉到事件,或筛选条件太窄。如果事件有出现,再看「最近触发规则」有没有命中,以及「当前动画」有没有切到你期望的动画。

03 / ASSETS

资源管理

素材库、petpack 导入与导出都在这里

「资源」标签页做两件事:管理当前宠物包里的素材文件,以及导入/导出整份 .petpack(本质是包含 manifest.json 和素材文件的 ZIP 包)。

素材库会列出每个文件的类型、大小,以及被哪些动画或规则引用——被引用的素材会有提示,避免你误删正在使用的文件。

导入单个资源

如果只是给当前宠物包补一张图、一个 GIF 或一段视频,不需要重新打包 petpack,直接在「资源」页的「导入资源」区域操作:

  1. 点「选择文件」选择本机素材,也可以把文件拖到导入区域。
  2. 在「导入名称」里改一个好认的名字;不改也会用文件名作为默认名称。
  3. 点「导入」。导入成功后,这个资源会出现在下方「包内资源」列表里。
  4. 去「动画」标签页,新建或编辑动画,在「资源」下拉里选刚导入的文件,把它绑定到动画上。
Tip .mov 文件导入时会自动转换成可预览的 WebM;如果只是想替换已经选中的包内资源,可以在右侧详情区拖入一个同类型文件,面板会执行替换。

删除资源

「包内资源」列表默认只浏览和选择资源;要删除时,先点列表标题右侧的「编辑」,每个资源行才会出现「删除」按钮。

  1. 在「包内资源」里选中要删的文件,先看右侧「引用详情」。如果显示它正在被某个动画或规则使用,删除会影响对应配置。
  2. 点「编辑」进入删除模式,再点资源行上的「删除」。
  3. 未被引用的资源会只提示确认删除;正在被引用的资源会提示「正被 N 处引用」,确认后会同时移除这些动画/规则里的引用,避免留下失效路径。
  4. 删除后如果某个动画失去了资源,需要去「动画」标签页重新选择素材或补上新的资源。
限制项 数值
支持格式 .gif .webp .webm .mp4 .mov .png .svg
单文件大小 不设固定上限,受当前机器资源保护约束
单个 petpack 大小 不设固定上限,导入前会检查可用内存
ZIP entry 数量 不设固定上限
符号链接 不允许,会被直接拒绝

导入 petpack 的过程:校验 ZIP 结构与资源预算 → 安全检查(拒绝符号链接、越权路径)→ 校验 manifest.json → 原子安装(先解压到临时目录,再备份旧包,最后原子替换;任何一步失败都会自动回滚,不会破坏现有宠物包)。

导出 petpack 会把当前素材,与你在面板里编辑过的动画、规则合并进 manifest,重新校验后打包成新的 .petpack,就可以发给其他人了。

Security petpack 不包含也不会执行任何脚本,只有 manifest.json 和白名单格式的素材文件——导入别人做的宠物包是安全的静态资源操作。

04 / ANIMATIONS

动画设置

默认动画、动画剪辑与关键帧

动画都在控制面板的「动画」标签页里管理。页面上是一列动画卡片:默认动画永远排在最前(卡片标题带「(默认)」,不能删除),后面是你自己添加的动画。点任意卡片打开编辑器,点最下方的「+ 添加动画」新建一个。

编辑器里最基本的两项是动画名称资源(从「选择包内资源」下拉里挑当前宠物包内的素材)。填好后点「保存」;非默认动画还会有「删除」按钮。之后在规则里要用到这个动画时,是直接按名字从下拉里选的,所以起个好认的名字即可,不用记任何编号。

非默认动画可以在编辑器里选动画类型,不同类型会显示不同的设置项:

类型 行为 & 出现的设置
默认动画 待机动画,永远循环。没有互动、或单次动画播完后都回到它。只有名称和资源两项设置。
单次播放 播放一次后自动回到默认动画,适合点击反馈。会多出「持续时间(毫秒)」,以及「位移 + 缓动」设置。
循环播放 持续循环,不会自己停,要靠别的规则或退出动作切走。适合拖拽中、专注等持续状态。
关键帧 用 0–1 的进度控制播放位置,配合关键帧设置实现「鼠标从哪个方向靠近、宠物就看向哪里」之类的效果。会多出「关键帧设置」按钮。

三种非默认类型都有一个「打断动画」勾选。不勾选时(默认),新动画会排队,等当前动画播完再上场;勾上后,这个动画一被触发就立刻打断当前动画抢先播放。

动画怎么排队、怎么切换

同一时间宠物只播一个动画。当一个动画正在播、又有新动画被触发时,宠物不会粗暴地打断当前动作,而是按下面的规则来切换:

  • 当前动画会先播完。单次播放动画会把它的时长播满,循环播放动画会一直转——这期间来的新动画都得等。
  • 只记住最后一个请求。等待期间如果连续来了好几个新动画,只有最后一个会被记住,中间那些会被跳过。当前动画播完后,就接着播这个「最后到的」;如果没有等待中的动画,就回到默认动画。
  • 想插队就勾「打断动画」。给某个动画勾上「打断动画」,它就能无视上面的排队规则,一触发立刻顶掉当前动画开始播(比如拖拽、点击这种希望马上有反馈的动作)。

关键帧动画是个特例:它由鼠标位置连续驱动,不参与排队,任何时候都立即生效。

绿幕透明:把纯色背景变透明

如果你的动画素材是视频(.webm / .mp4 / .mov),背景又是一整块纯色(常见的是绿色),可以用绿幕功能把背景抠掉、只留下宠物。当资源是视频时,编辑器里会多出「绿幕透明」一栏:

  • 勾选「将绿色背景处理为透明」打开这个功能。
  • 抠像颜色:点开颜色块,选你要抠掉的背景色(默认绿色)。
  • 容差:拉得越大,越接近的颜色也会被一起抠掉。背景色不太均匀时可以调大一点。
  • 柔化:让抠出来的边缘更自然。调太大边缘是柔和了,但也容易连宠物身上接近背景色的部分一起吃掉,适度即可。
Tip 关键帧动画会随鼠标不停地来回擦除播放,如果每一帧都实时抠像会很卡。所以关键帧动画这一栏改成了「处理透明背景」:先展开「绿幕参数」把颜色、容差、柔化调好,再点「烘焙成透明 webm」,程序会一次性把背景抠掉、生成一个透明的 webm 素材来用(记得先保存这个动画再烘焙)。

位移 + 缓动:让动画自己走一段

单次播放动画的编辑器里有「位移」一栏,可以让宠物在播这个动画的同时,自己朝某个方向挪一段路(比如配一个「走路」动画让它真的走过去)。它和规则里那个独立的「移动宠物」动作不是一回事——位移是跟着动画走的

  • 方向:选「不移动」,或 上 / 下 / 左 / 右,以及四个斜角方向(左上 / 右上 / 左下 / 右下)。
  • 速度(像素/秒):每秒走多少像素,数值越大走得越快。
  • 选了方向后,下面会展开「缓动」,让移动更自然:预设可选 线性(匀速)/ 开始缓动(起步慢)/ 结束缓动(快到时减速)/ 开始·结束缓动(两头都缓);还能用强度调缓动的明显程度,用开始缓动时长结束缓动时长启动延迟结束延迟(都以毫秒计)微调加减速的节奏和首尾的停顿。

关键帧设置:让宠物跟着鼠标动

关键帧动画的原理,是把一段视频/GIF 的播放进度(从头到尾用 0 到 1 表示)交给鼠标来控制,而不是让它自动播。比如用一段「宠物转头看四周」的视频,就能做出「鼠标在左边它就往左看、鼠标转到右边它就往右看」的效果——这类规则怎么接鼠标,见下一节的「移动追踪」示例。

「关键帧设置」这个编辑器,管的是鼠标进度和视频进度之间的对应关系。点开后是一条横向的轨道,上面有几个可拖动的关键点,每个关键点表示「当鼠标进度到这里时,视频该播到哪一帧」:

  • 添加:在轨道的空白处点一下,就新增一个关键点。
  • 移动:按住关键点左右拖,就能改这个对应关系(把它往左/往右挪,等于让同样的鼠标位置对应到视频更早/更晚的画面)。
  • 删除:点一下选中某个关键点,再按键盘 Delete 键删掉。
  • 预览:轨道下方的预览会跟着你的拖动实时显示对应画面,边拖边看效果。
  • 调乱了想重来,点「重置默认」恢复成均匀分布的默认关键点;调好后点「完成」关闭。

默认是 4 个均匀分布的关键点(0、0.25、0.5、0.75 一一对应),也就是鼠标进度和视频进度线性对应。多数情况下用默认就够了;只有当你想让某段画面「转得快一点/慢一点」时,才需要来这里手动调关键点。

05 / RULES

触发规则

让宠物对世界做出反应的核心机制

在「规则」标签页里可以新建、启用/停用、编辑、删除规则,还能导入 / 导出(从剪贴板或文件)。启用/停用直接点规则行左侧的勾选框即可,不必打开编辑器。保存时面板会做基本的冲突检查(例如多条高优先级规则互相打断),命中会在列表上方弹出「检测到 N 个潜在规则冲突」的提示。

点「添加新规则」打开规则编辑器,一条规则由四块组成:基本信息、触发条件、执行动作,以及(用到鼠标移动条件时才出现的)退出状态。基本信息区的几个控件:

控件 作用
名称 规则名,必填,方便自己辨认。
优先级 数字越大越先触发(默认 0)。规则按优先级从高到低依次匹配。
全局冷却时间(毫秒) 这条规则触发后,所有非连续规则都要等这段时间才能再次触发,避免被连续刷。
命中后停止继续匹配 默认勾选。开启后这条规则一旦触发,就不再往下匹配优先级更低的规则。
执行策略 在「执行动作」区顶部:顺序(按顺序执行全部动作)或 随机(每次随机挑一个执行)。
退出条件 / 退出动作 只有当某个触发条件是「鼠标移动」时才会出现,用于状态型规则,见下方「规则编写实战」。

触发条件怎么填

「触发条件」决定什么时候执行这条规则。点「添加条件」会出现一张条件卡片,每张卡片都从「条件类型」下拉里选一种事件,比如点击、双击、右键点击、拖拽开始/拖拽中/拖拽结束、鼠标进入/离开/移动/静止、悬停时长、闲置时长、定时器、随机定时器、番茄钟完成等。

条件卡片里的控件 怎么用
条件类型 选择这条条件监听的事件。最常用的是点击、鼠标进入、鼠标移动、拖拽开始、拖拽结束、随机定时器。
必须 勾选后表示这条条件必须满足;取消勾选后表示它属于「可选条件」组,多个可选条件里命中任意一个即可。
高级筛选 点展开箭头后出现「筛选字段 / 操作符 / 筛选值」,用来把条件收窄。例如鼠标移动时可以筛「到宠物中心的距离 < 300」,点击时可以筛「是否在宠物内 = 真」。
定时器间隔 条件类型选「定时器」时会填写「间隔(毫秒)」;选「随机定时器」时填写「最小间隔(毫秒)」和「最大间隔(毫秒)」。
持续成立时间(毫秒) 条件类型选「鼠标移动」并展开高级筛选时会出现。它要求筛选条件连续成立一段时间才触发,适合「靠近 3 秒后进入某状态」这类玩法。

每个触发条件卡片上有一个「必须」勾选,用来区分两种条件:必须条件需要在系统默认的短时间窗口内全部满足才算命中(系统默认会在约 1 秒内回看最近事件;这个时间窗口目前不在面板里单独设置);取消勾选的是可选条件,它们组成一个「任一命中即可」的候选组。

Tip 你不用手动设置「连续触发」——当一条规则同时含有鼠标移动条件和「设置关键帧进度」动作时,面板会自动把它当作连续规则处理(绕过冷却,持续刷新)。

06 / DISPLAY

显示设置

宠物在桌面上「看起来」的样子

设置 范围/说明
缩放 50% - 300%,调整宠物窗口的显示大小。
透明度 50% - 100%,让宠物更融入桌面背景。
置顶显示 开启后宠物窗口始终显示在其他窗口之上。
鼠标穿透 开启后鼠标点击会「穿过」宠物窗口,作用到桌面或下层窗口,适合完全不想被打扰的场景。
重置位置 一键把宠物挪回配置中记录的默认坐标。
注意 开启鼠标穿透后,点击、拖拽等依赖鼠标事件的规则会失效——因为鼠标事件不会再被宠物窗口捕获。

07 / SYSTEM

系统设置

开机启动、语言、日志与系统托盘

「系统」标签页管理和应用本身相关的设置:开机自动启动、界面语言(目前支持中文/英文,且带自动回退——找不到翻译会回退到英文,再回退到 key 本身,不会出现空白),以及运行日志。

日志区域可以开关日志记录、调整级别(trace / debug / info / warn / error)、选择查看某个日志文件、打开日志所在目录、刷新或清空日志——遇到问题时这是最快的排查入口。

系统托盘菜单

应用会在系统托盘(macOS 菜单栏 / Windows 任务栏通知区)放一个 Desktop Pet 图标。右键点击它可以展开菜单——当宠物被隐藏、跑出屏幕,或你临时不想打开面板时,这里是最快的入口。菜单里能做:

菜单项 作用
打开控制面板 打开完整的设置面板。
素材包 查看当前素材包,或导入新的 .petpack。
显示桌宠 隐藏或重新显示宠物窗口。
锁定拖拽 / 鼠标穿透 / 置顶显示 / 暂停交互 常用开关,和「显示」页的对应项一致,可就近切换。
缩放 / 不透明度 从预设档位里快速调整宠物大小和透明度。
重置位置 把宠物挪回默认坐标,找回跑到屏幕外的宠物。
查看日志 / 关于 / 退出 打开日志、查看版本信息、退出应用。

08 / RULE RECIPES

规则编写实战

拿「淘淘」宠物包里的规则当例子,边看边抄

所有规则都在控制面板的「规则」标签页里用编辑器创建。下面用官方示例包「淘淘」里的真实规则,逐条讲清楚在面板里怎么一步步搭出来;每条后面附一段完整的导入 JSON,点「复制」按钮,再到规则页选「导入规则 → 剪贴板」,就能直接装进程序

导入前提 这些 JSON 里的动画是按 ID 引用的,直接复制导入需要当前已加载「淘淘」宠物包;换成别的包时,导入后请到规则里把每个动作的「动画」重新选一下。

规则的每个触发条件都从一个「条件类型」下拉里选,面板里能选的有:

分类 条件类型
指针 点击 / 双击 / 右键点击 / 鼠标进入 / 鼠标离开 / 鼠标移动 / 鼠标静止
拖拽 拖拽开始 / 拖拽中 / 拖拽结束
持续时长 悬停时长 / 闲置时长
计时器 定时器 / 随机定时器
系统 / 生命周期 应用启动 / 宠物包已加载 / 番茄钟完成

每个条件卡片都能展开「高级筛选」,用筛选字段 + 操作符 + 筛选值进一步限定。常用筛选字段有:是否在宠物内、到宠物中心的距离、到宠物边界的距离、速度、方向、鼠标角度进度、是否朝向宠物移动、拖拽距离、静止时间、已过时间、当前小时、星期几等;操作符就是 = != > >= < <= between in notIn;筛选值可以是数字、真/假,或用逗号分隔的多个值。

动作也从「动作类型」下拉里选,面板里能选的有:播放动画、设置关键帧进度、显示消息、随机消息、改变缩放、改变透明度、移动宠物、番茄钟、隐藏宠物、显示宠物、关闭交互、开启交互、重置位置、打开面板、空白动作、延时。其中「关闭交互 / 开启交互」成对开关鼠标穿透,让宠物暂时「不理人」;「延时」在动作序列里插入一段停顿;「空白动作」什么都不做,配合「随机」执行策略可以让宠物有一定概率毫无反应。

示例一 · 点击打招呼

点一下宠物,从两个动作里随机挑一个播放(点击-翻滚 或 抓虫子),7 秒内不重复触发。

  1. 「规则」页点添加新规则,名称填「点击打招呼」,优先级 50,全局冷却时间填 7000。
  2. 触发条件选点击(保持「必须」勾选,不加筛选就是点在宠物身上都算)。
  3. 执行动作加两条播放动画,分别选「点击-翻滚」和「抓虫子」。
  4. 执行策略选随机——每次点击只随机播其中一个。
导入 JSON
{
  "type": "desktop-pet.triggerRules",
  "schemaVersion": 1,
  "packageId": "淘淘",
  "rules": [
    {
      "id": "default-click-greeting",
      "name": "点击打招呼",
      "enabled": true,
      "cooldownMs": 7000,
      "priority": 50,
      "conditions": [
        {
          "type": "click",
          "required": true,
          "filters": []
        }
      ],
      "actionStrategy": "random",
      "actions": [
        {
          "type": "playAnimation",
          "animation": "234391e9-de3c-4fe6-934b-c22ab0babc24"
        },
        {
          "type": "playAnimation",
          "animation": "58244768-a5d2-42bc-97a3-5ecfad51dc73"
        }
      ]
    }
  ]
}

示例二 · 右键打开面板

右键点宠物,直接打开控制面板。优先级设得很高(100),保证它压过其它右键相关规则。

  1. 添加新规则,名称「右键打开面板」,优先级 100,全局冷却 500。
  2. 触发条件选右键点击
  3. 执行动作选打开面板(这个动作没有参数)。
导入 JSON
{
  "type": "desktop-pet.triggerRules",
  "schemaVersion": 1,
  "packageId": "淘淘",
  "rules": [
    {
      "id": "default-right-click-panel",
      "name": "右键打开面板",
      "enabled": true,
      "conditions": [
        {
          "type": "rightClick",
          "required": true,
          "filters": []
        }
      ],
      "cooldownMs": 500,
      "priority": 100,
      "actionStrategy": "sequence",
      "actions": [
        {
          "type": "openPanel"
        }
      ]
    }
  ]
}

示例三 · 随机互动(随机定时器)

每隔一段随机时间(2–10 分钟)随机做个小动作,让宠物显得有点自己的生活。

  1. 添加新规则,名称「随机互动」,优先级 10,全局冷却 8000。
  2. 触发条件选随机定时器,最小间隔填 120000、最大间隔填 600000(毫秒,即 2–10 分钟)。
  3. 执行动作加四条播放动画:向右走、向左走、点击-舔毛、点击-打喷嚏。
  4. 执行策略选随机
导入 JSON
{
  "type": "desktop-pet.triggerRules",
  "schemaVersion": 1,
  "packageId": "淘淘",
  "rules": [
    {
      "id": "default-random-timer",
      "name": "随机互动",
      "enabled": true,
      "cooldownMs": 8000,
      "priority": 10,
      "conditions": [
        {
          "type": "randomTimer",
          "required": true,
          "filters": [],
          "minMs": 120000,
          "maxMs": 600000
        }
      ],
      "actionStrategy": "random",
      "actions": [
        {
          "type": "playAnimation",
          "animation": "40e13f89-128f-425b-9d33-1b40e9b46075"
        },
        {
          "type": "playAnimation",
          "animation": "4f1dce3d-21aa-42d2-9faa-92a2af9da8cd"
        },
        {
          "type": "playAnimation",
          "animation": "608e5b41-20b8-4770-aab4-cfa13c450b22"
        },
        {
          "type": "playAnimation",
          "animation": "00000000-0000-4000-8000-000000000002"
        }
      ]
    }
  ]
}

示例四 · 拖动开始 / 结束

拖起宠物时先「抓取」再进入「悬空」循环;松手时播「下落」。这里体现顺序执行:抓取(单次播放)播完后自动进入悬空(循环播放)并一直保持,直到松手被切走。

  1. 第一条规则名「拖动开始」,触发条件拖拽开始;执行动作按顺序加「播放动画:抓取」「播放动画:悬空」,执行策略保持顺序
  2. 第二条规则名「拖动结束」,触发条件拖拽结束,全局冷却 2000;执行动作「播放动画:下落」。

下面这段 JSON 一次包含两条规则,复制导入会一起加进来。

导入 JSON
{
  "type": "desktop-pet.triggerRules",
  "schemaVersion": 1,
  "packageId": "淘淘",
  "rules": [
    {
      "id": "rule-mrae59za-dxdfcz",
      "name": "拖动开始",
      "enabled": true,
      "cooldownMs": 0,
      "priority": 0,
      "conditions": [
        {
          "type": "dragStart",
          "required": true,
          "filters": []
        }
      ],
      "actionStrategy": "sequence",
      "actions": [
        {
          "type": "playAnimation",
          "animation": "c4a2e986-6102-43ed-ac14-42c3bf4b0429"
        },
        {
          "type": "playAnimation",
          "animation": "b72577be-6f4d-4a83-8278-98110bbffdf0"
        }
      ]
    },
    {
      "id": "rule-mraegy9s-owr3id",
      "name": "拖动结束",
      "enabled": true,
      "cooldownMs": 2000,
      "priority": 0,
      "conditions": [
        {
          "type": "dragEnd",
          "required": true,
          "filters": []
        }
      ],
      "actionStrategy": "sequence",
      "actions": [
        {
          "type": "playAnimation",
          "animation": "ce0772a0-86e3-423d-99d3-427ec59ddf6d"
        }
      ]
    }
  ]
}

示例五 · 专注模式与专注结束

双击宠物开始一次专注倒计时,同时播「入睡」再进入「睡觉」循环;倒计时结束后,再由另一条规则接住「番茄钟完成」事件,让宠物「醒来」并说一句话。这是一组前后配合的规则,建议放在一起看。

  1. 第一条规则名称「专注模式」,全局冷却 30000;触发条件选双击
  2. 「专注模式」的执行动作按顺序:番茄钟(计时器命令选「开始」,持续时间 30000,计时器标签填「专注」)→「播放动画:入睡」→「播放动画:睡觉」。
  3. 第二条规则名称「专注结束」,全局冷却 7000;触发条件选番茄钟完成
  4. 「专注结束」的执行动作按顺序:显示消息(消息文本填「休息好了 开始工作吧」,气泡最大宽度 220)→「播放动画:醒来」。

下面这段 JSON 一次包含两条规则,复制导入会一起加进来。

导入 JSON
{
  "type": "desktop-pet.triggerRules",
  "schemaVersion": 1,
  "packageId": "淘淘",
  "rules": [
    {
      "id": "rule-mqywx0zw-g2e50y",
      "name": "专注模式",
      "enabled": true,
      "cooldownMs": 30000,
      "priority": 0,
      "conditions": [
        {
          "type": "doubleClick",
          "required": true,
          "filters": []
        }
      ],
      "actionStrategy": "sequence",
      "actions": [
        {
          "type": "pomodoroTimer",
          "command": "start",
          "durationMs": 30000,
          "label": "专注"
        },
        {
          "type": "playAnimation",
          "animation": "2ad666b5-e2cb-40d1-8d4e-b81e5f75de98"
        },
        {
          "type": "playAnimation",
          "animation": "309ce204-ff88-42bc-b9ee-0ee29a36c9b4"
        }
      ]
    },
    {
      "id": "rule-mr37jfsf-m3gr7n",
      "name": "专注结束",
      "enabled": true,
      "cooldownMs": 7000,
      "priority": 0,
      "conditions": [
        {
          "type": "pomodoroComplete",
          "required": true,
          "filters": []
        }
      ],
      "actionStrategy": "sequence",
      "actions": [
        {
          "type": "showMessage",
          "text": "休息好了 开始工作吧",
          "durationMs": 1800,
          "bubbleMaxWidth": 220
        },
        {
          "type": "playAnimation",
          "animation": "c36b5fcb-2ba8-4844-ae0b-80edca7953be"
        }
      ]
    }
  ]
}

示例六 · 移动追踪(状态型规则)

鼠标在宠物附近持续移动时,宠物用关键帧动画「看鼠标」实时跟着鼠标方向转头;鼠标走远或停下一段时间后,自动回到默认动画。这类「进入某状态、满足条件再退出」的规则叫状态型规则。

  1. 添加新规则,名称「移动追踪」。
  2. 触发条件选鼠标移动,展开高级筛选:字段「到宠物中心的距离」、操作符 <、值 300;把「持续成立时间(ms)」填 5000(靠近并持续 5 秒才进入状态)。
  3. 执行动作选设置关键帧进度,动画选「看鼠标」,进度来源选「鼠标角度进度」。(因为有鼠标移动条件 + 设置关键帧进度动作,面板会自动把它当作连续规则。)
  4. 因为用了鼠标移动条件,编辑器会出现退出条件 / 退出动作两块。退出条件加两个「任一命中即可」的:鼠标移动 + 距离 > 400 持续 5 秒,或 鼠标静止 + 静止时间 > 5000。退出动作选「播放动画」→ 默认动画。

关键帧动画「看鼠标」是这样把鼠标方向换算成播放进度的:

鼠标在宠物的方向 进度值
上方 0
右侧 0.25
下方 0.5
左侧 0.75
导入 JSON
{
  "type": "desktop-pet.triggerRules",
  "schemaVersion": 1,
  "packageId": "淘淘",
  "rules": [
    {
      "id": "rule-mqyjo64o-gq6c07",
      "name": "移动追踪",
      "enabled": true,
      "cooldownMs": 0,
      "priority": 0,
      "continuous": true,
      "conditions": [
        {
          "type": "mouseMove",
          "required": true,
          "filters": [
            {
              "field": "distanceToPetCenter",
              "operator": "<",
              "value": 300
            }
          ],
          "sustainMs": 5000
        }
      ],
      "actionStrategy": "sequence",
      "actions": [
        {
          "type": "setKeyframeProgress",
          "animation": "475f0a58-868d-4204-81e9-0ad753af8f3d",
          "progressFrom": "angleToPetProgress",
          "offset": 0,
          "scale": 1
        }
      ],
      "state": {
        "exitConditions": [
          {
            "type": "mouseMove",
            "required": false,
            "filters": [
              {
                "field": "distanceToPetCenter",
                "operator": ">",
                "value": 400
              }
            ],
            "sustainMs": 5000
          },
          {
            "type": "mouseStill",
            "required": false,
            "filters": [
              {
                "field": "durationMs",
                "operator": ">",
                "value": 5000
              }
            ]
          }
        ],
        "exitActions": [
          {
            "type": "playAnimation",
            "animation": "00000000-0000-4000-8000-000000000001"
          }
        ]
      }
    }
  ]
}

示例七 · 隐身模式(成对进入 / 离开)

鼠标一进入宠物就隐藏,离开又出现——两条规则配成一对。淘淘包里这对默认是停用的,想玩就在规则行左侧勾选启用。

  1. 第一条:触发条件鼠标进入 → 执行动作隐藏宠物
  2. 第二条:触发条件鼠标离开 → 执行动作显示宠物
  3. 两条默认停用;导入后在规则列表里点左侧勾选框启用即可。
导入 JSON
{
  "type": "desktop-pet.triggerRules",
  "schemaVersion": 1,
  "packageId": "淘淘",
  "rules": [
    {
      "id": "rule-mrd4kcsg-mwsfwd",
      "name": "隐身模式",
      "enabled": false,
      "cooldownMs": 0,
      "priority": 0,
      "conditions": [
        {
          "type": "mouseEnter",
          "required": true,
          "filters": []
        }
      ],
      "actionStrategy": "sequence",
      "actions": [
        {
          "type": "hidePet"
        }
      ]
    },
    {
      "id": "rule-mrd4llr4-5o0ojs",
      "name": "隐身模式",
      "enabled": false,
      "cooldownMs": 0,
      "priority": 0,
      "conditions": [
        {
          "type": "mouseLeave",
          "required": true,
          "filters": []
        }
      ],
      "actionStrategy": "sequence",
      "actions": [
        {
          "type": "showPet"
        }
      ]
    }
  ]
}

09 / ASSET CRAFTING

素材制作

用 AI 生图 + 生视频,做出会动的绿幕宠物素材

宠物动画的素材,可以完全用 AI 工具生成:先用生图模型做出一张纯绿背景的宠物图,再用生视频模型让它动起来,最后把绿幕视频导入程序、用「动画设置」里的绿幕功能抠成透明即可(见「04 动画设置 · 绿幕透明」)。下面是一套实测可用的流程。

第一步 · 生成绿幕底图

挑 2–3 张宠物的全身照作参考,用 GPT image、即梦等生图模型,生成一张纯绿背景的宠物正面照。参考提示词:

Prompt 生成一张参考图中的金渐层坐在地上的正面照,纯绿背景,精确色值 #00E676,无任何杂物、纹理或渐变。猫整体高度占整个画面总高度的 50%。生成比例选择 1:1。

把提示词里的「金渐层」换成你自己的宠物即可。绿色背景要纯、色值统一,后面抠图才干净。

注意 生成的宠物不要占太满整幅画面(提示词里让它只占约 50% 高度就是这个原因)。留足边距,后面生成视频动作时宠物才不容易「出镜头」。

第二步 · 生成绿幕动作视频

拿第一步的底图,用生视频模型生成不同动作的绿幕视频。实测用 Seedance 2.0 fast 效果不错——素材质量直接决定最终效果,这一步最值得多花时间打磨。

  • 不要用首尾帧模式,改用「全能参考」,在提示词里说明「首帧从 xxx 开始,尾帧最后回到 xxx」——让动作首尾自然衔接,方便循环播放。
  • 移动镜头类、幅度较大的动作,在提示词里补上:「镜头全程跟随猫,猫全程不出画,尾巴全程不出画,允许适当缩放保证猫身完整」,避免宠物移动时跑出画面或被裁掉。

第三步 · 导入并抠成透明

把生成的绿幕视频(.webm / .mp4 / .mov)在「资源」页导入(见「03 资源管理 · 导入单个资源」),再到「动画」页新建动画、绑定这个素材,打开「绿幕透明」把绿色背景抠掉(关键帧动画用「烘焙成透明 webm」)。之后就能在规则里使用这个动画了。

制作建议 同一只宠物的各个动作最好用同一张底图来生成,保证画风、体型、锚点一致,切换动画时才不会「跳一下」;待机动画尽量用体积小、能循环的素材,减少常驻的 CPU/内存占用;关键帧动画(如跟随鼠标转头)用视频做时,动作帧数越多,跟随时越顺滑。

10 / FAQ

常见问题

遇到问题先看这里

为什么 petpack 导入失败?

常见原因:manifest.json 不在 ZIP 根目录;缺少 schemaVersionpackageId、 默认动画字段 等必填字段;动画 ID 不是 UUID;manifest 引用了不存在的素材;素材路径包含 ..、绝对路径或反斜杠;文件格式不在支持列表;当前机器可用内存或磁盘余量不足以安全完成导入。

为什么动画不播放?

依次检查:这个动画有没有在「动画」页绑定真实存在的素材;规则的「播放动画」动作里有没有选中动画;规则左侧的启用开关有没有打开;条件筛选是不是太窄(比如「是否在宠物内」或距离阈值没满足);是不是有另一条更高优先级的循环播放规则一直在打断它。可以先去「总览」页看「事件历史」,确认你的操作有没有被系统捕捉到。

怎么做透明背景?

推荐使用带透明通道的 PNG、WebP、GIF 或 WebM。MP4/MOV 的透明能力依赖具体编码和平台支持,稳定性不如 WebM。 如果只有纯色背景的视频素材,可以用「动画设置」里的「绿幕透明」功能把背景抠成透明(做法见「素材制作」)。

从手册复制的规则导入后没反应?

「规则编写实战」里的示例 JSON 是按「淘淘」宠物包里的动画 ID 引用的。如果你当前用的不是「淘淘」包,导入后规则会找不到对应动画——需要打开规则,把每个「播放动画」动作重新选成你自己包里的动画。规则本身的逻辑(条件、冷却、优先级等)是通用的,照样能用。

petpack 里可以包含脚本吗?

不可以。petpack 只包含 manifest.json 和白名单格式的素材文件,不会执行任意脚本,这也是它能安全分享的前提。

可以同时安装多个宠物包吗?

可以导入并保留多个包,但当前配置中只有一个 currentPackageId 处于激活状态,也就是同一时间只有一只宠物在桌面上活动。可以在「资源」页切换当前宠物包。

点宠物没反应、拖不动怎么办?

多半是开启了「鼠标穿透」——这时点击、拖拽都会「穿过」宠物作用到桌面。去「显示」页或托盘菜单关掉「鼠标穿透」即可。另外托盘菜单里的「锁定拖拽」「暂停交互」也会让宠物暂时不响应,一并检查一下。

宠物跑到屏幕外面找不到了?

右键点击系统托盘图标 → 「重置位置」,或在「显示」页点「重置位置」,宠物会回到配置里记录的默认坐标。

找不到宠物窗口,怎么打开控制面板?

右键点击系统托盘里的 Desktop Pet 图标,选「打开控制面板」。托盘菜单里还能直接切换显示桌宠、鼠标穿透、置顶、缩放、不透明度等常用开关,以及导入素材包、查看日志。

改了设置需要重启应用吗?

不需要。面板里的动画、规则、显示等配置一旦保存就会写入本地文件,宠物窗口会实时重新加载并立即生效,无需重启。

可以开机自动启动吗?我的配置存在哪里?

在「系统」页可以打开「开机启动」。所有配置都保存在本机的 config.json,宠物包和素材存放在应用数据目录下的 packages/ 里,不会上传到任何服务器。

12 / ROADMAP

未来计划:社区广场

规则和宠物包的分享,现在架构已经准备好了

以下内容还没有开发,是基于现有架构推演出来的设计方向——如果你对这件事感兴趣,欢迎在 GitHub 上提出想法或参与建设。

资源包广场规划中

集中浏览社区制作的 .petpack,一键安装到本地。

  • 按标签(画风、动物种类、动画数量、文件体积)搜索与筛选
  • 预览动图、作者信息、版本变更记录
  • 下载量、收藏、评分,帮助发现优质内容
  • 「一键导入」本质仍是现有的下载 → 校验 → 原子安装流程,不需要新的信任模型

规则广场规划中

分享单条规则 JSON,而不是整份宠物包——专门用来交流「玩法」。

  • 按条件类型、动作类型筛选,方便按玩法找灵感
  • 「复制到当前包」把规则追加进本地触发规则
  • 导入时自动做动画引用检查:规则里引用的动画剪辑如果本地没有,会提示先补上对应素材再启用
  • 适合分享像「鼠标画圈会转圈圈」这类不需要换整套素材的巧妙规则

现有架构里,已经为这两个广场准备好的基础设施:

  • petpack 本身是自包含的 ZIP + JSON manifest,天然适合上传、下载和版本管理;
  • manifest 校验、素材格式白名单、资源耗尽保护、无脚本执行——分享内容默认是安全的静态资源;
  • schemaVersion 字段已经为未来的格式演进留了扩展空间;
  • 规则的 JSON 结构和面板 UI 是同一份数据模型,规则广场不需要再设计一套「半成品」格式。