GUIDE / 使用手册
如何驯养
你的桌面宠物
Every setting, rule, and package — explained.
从第一次打开控制面板,到写出一条属于你的规则,再到打包一份可以分享的宠物包——这里是 Desktop Pet 的完整说明书。
01 / GETTING STARTED
快速开始
两分钟认识你的新桌面伙伴
Desktop Pet
有两种运行方式:直接使用打包好的安装包(下载后双击安装,打开即可使用),或者在开发模式下运行
npm run dev 以 Electron 方式启动。
首次启动后,你会在桌面角落看到一个 320×320、透明背景、无边框、默认置顶 的宠物窗口。它安静地待在那里,不会抢占你的任务栏或窗口切换列表。
-
启动应用 —— 打开安装好的
App,或执行
npm run dev。 - 找到你的宠物 —— 它会出现在屏幕角落,直接拖拽即可移动到任意位置。
- 打开控制面板 —— 右键点击宠物(默认规则)或使用系统托盘图标。
- 导入或补全宠物包 —— 在控制面板左侧点击「资源」,下载 示例宠物包 后导入;也可以在默认创建的宠物包里继续添加你自己的素材。
- 调整设置 —— 面板左侧分区:资源、动画、规则、显示、系统。
- 保存即生效 —— 配置会写入本地文件,宠物窗口实时重新加载,无需重启应用。
config.json
中,不会上传到任何服务器;控制面板是一个独立的
960×680
标准窗口,和宠物窗口完全分离,关闭面板不会影响宠物的显示。
02 / OVERVIEW
界面总览
状态速览和调试规则最有用的一页
「总览」是排查问题的第一站。它是只读页面,不在这里改配置,而是把当前宠物包、规则数量、资源数量、显示状态和运行时事件集中放在一起,让你先判断「系统有没有收到事件、规则有没有命中、动画有没有切过去」。
顶部统计
显示当前宠物包 ID、规则数量和资源数量。导入 petpack 或新增素材后,可以先看这里确认数量有没有变化。
当前显示设置
展示缩放、透明度、置顶显示和鼠标穿透状态。特别是鼠标穿透:开启后点击、拖拽等规则不会再被宠物窗口捕捉。
当前动画
正在播放的动画名称和缩略图预览,用来确认动作有没有真的切换。
最近触发规则
最近命中的规则名称、执行的动作摘要,以及触发时间,一眼看出是哪条规则生效了。
事件历史
最近 8 条事件(来自最近 40 条事件的循环缓冲区),用来确认点击、拖拽、鼠标移动等操作有没有被系统捕捉到。
举个例子:如果你配置了一条「鼠标靠近 3 秒后打招呼」的规则却没反应,先看「事件历史」里有没有「鼠标移动」或「鼠标静止」;如果没有,通常是鼠标穿透开启了、窗口没有捕捉到事件,或筛选条件太窄。如果事件有出现,再看「最近触发规则」有没有命中,以及「当前动画」有没有切到你期望的动画。
03 / ASSETS
资源管理
素材库、petpack 导入与导出都在这里
「资源」标签页做两件事:管理当前宠物包里的素材文件,以及导入/导出整份
.petpack(本质是包含
manifest.json 和素材文件的 ZIP
包)。
素材库会列出每个文件的类型、大小,以及被哪些动画或规则引用——被引用的素材会有提示,避免你误删正在使用的文件。
导入单个资源
如果只是给当前宠物包补一张图、一个 GIF 或一段视频,不需要重新打包 petpack,直接在「资源」页的「导入资源」区域操作:
- 点「选择文件」选择本机素材,也可以把文件拖到导入区域。
- 在「导入名称」里改一个好认的名字;不改也会用文件名作为默认名称。
- 点「导入」。导入成功后,这个资源会出现在下方「包内资源」列表里。
- 去「动画」标签页,新建或编辑动画,在「资源」下拉里选刚导入的文件,把它绑定到动画上。
.mov 文件导入时会自动转换成可预览的 WebM;如果只是想替换已经选中的包内资源,可以在右侧详情区拖入一个同类型文件,面板会执行替换。
删除资源
「包内资源」列表默认只浏览和选择资源;要删除时,先点列表标题右侧的「编辑」,每个资源行才会出现「删除」按钮。
- 在「包内资源」里选中要删的文件,先看右侧「引用详情」。如果显示它正在被某个动画或规则使用,删除会影响对应配置。
- 点「编辑」进入删除模式,再点资源行上的「删除」。
- 未被引用的资源会只提示确认删除;正在被引用的资源会提示「正被 N 处引用」,确认后会同时移除这些动画/规则里的引用,避免留下失效路径。
- 删除后如果某个动画失去了资源,需要去「动画」标签页重新选择素材或补上新的资源。
| 限制项 | 数值 |
|---|---|
| 支持格式 |
.gif .webp
.webm .mp4
.mov .png
.svg
|
| 单文件大小 | 不设固定上限,受当前机器资源保护约束 |
| 单个 petpack 大小 | 不设固定上限,导入前会检查可用内存 |
| ZIP entry 数量 | 不设固定上限 |
| 符号链接 | 不允许,会被直接拒绝 |
导入 petpack 的过程:校验 ZIP
结构与资源预算 → 安全检查(拒绝符号链接、越权路径)→
校验 manifest.json →
原子安装(先解压到临时目录,再备份旧包,最后原子替换;任何一步失败都会自动回滚,不会破坏现有宠物包)。
导出 petpack
会把当前素材,与你在面板里编辑过的动画、规则合并进
manifest,重新校验后打包成新的
.petpack,就可以发给其他人了。
manifest.json
和白名单格式的素材文件——导入别人做的宠物包是安全的静态资源操作。
04 / ANIMATIONS
动画设置
默认动画、动画剪辑与关键帧
动画都在控制面板的「动画」标签页里管理。页面上是一列动画卡片:默认动画永远排在最前(卡片标题带「(默认)」,不能删除),后面是你自己添加的动画。点任意卡片打开编辑器,点最下方的「+ 添加动画」新建一个。
编辑器里最基本的两项是动画名称和资源(从「选择包内资源」下拉里挑当前宠物包内的素材)。填好后点「保存」;非默认动画还会有「删除」按钮。之后在规则里要用到这个动画时,是直接按名字从下拉里选的,所以起个好认的名字即可,不用记任何编号。
非默认动画可以在编辑器里选动画类型,不同类型会显示不同的设置项:
| 类型 | 行为 & 出现的设置 |
|---|---|
| 默认动画 | 待机动画,永远循环。没有互动、或单次动画播完后都回到它。只有名称和资源两项设置。 |
| 单次播放 | 播放一次后自动回到默认动画,适合点击反馈。会多出「持续时间(毫秒)」,以及「位移 + 缓动」设置。 |
| 循环播放 | 持续循环,不会自己停,要靠别的规则或退出动作切走。适合拖拽中、专注等持续状态。 |
| 关键帧 | 用 0–1 的进度控制播放位置,配合关键帧设置实现「鼠标从哪个方向靠近、宠物就看向哪里」之类的效果。会多出「关键帧设置」按钮。 |
三种非默认类型都有一个「打断动画」勾选。不勾选时(默认),新动画会排队,等当前动画播完再上场;勾上后,这个动画一被触发就立刻打断当前动画抢先播放。
动画怎么排队、怎么切换
同一时间宠物只播一个动画。当一个动画正在播、又有新动画被触发时,宠物不会粗暴地打断当前动作,而是按下面的规则来切换:
- 当前动画会先播完。单次播放动画会把它的时长播满,循环播放动画会一直转——这期间来的新动画都得等。
- 只记住最后一个请求。等待期间如果连续来了好几个新动画,只有最后一个会被记住,中间那些会被跳过。当前动画播完后,就接着播这个「最后到的」;如果没有等待中的动画,就回到默认动画。
- 想插队就勾「打断动画」。给某个动画勾上「打断动画」,它就能无视上面的排队规则,一触发立刻顶掉当前动画开始播(比如拖拽、点击这种希望马上有反馈的动作)。
关键帧动画是个特例:它由鼠标位置连续驱动,不参与排队,任何时候都立即生效。
绿幕透明:把纯色背景变透明
如果你的动画素材是视频(.webm / .mp4 / .mov),背景又是一整块纯色(常见的是绿色),可以用绿幕功能把背景抠掉、只留下宠物。当资源是视频时,编辑器里会多出「绿幕透明」一栏:
- 勾选「将绿色背景处理为透明」打开这个功能。
- 抠像颜色:点开颜色块,选你要抠掉的背景色(默认绿色)。
- 容差:拉得越大,越接近的颜色也会被一起抠掉。背景色不太均匀时可以调大一点。
- 柔化:让抠出来的边缘更自然。调太大边缘是柔和了,但也容易连宠物身上接近背景色的部分一起吃掉,适度即可。
位移 + 缓动:让动画自己走一段
单次播放动画的编辑器里有「位移」一栏,可以让宠物在播这个动画的同时,自己朝某个方向挪一段路(比如配一个「走路」动画让它真的走过去)。它和规则里那个独立的「移动宠物」动作不是一回事——位移是跟着动画走的。
- 方向:选「不移动」,或 上 / 下 / 左 / 右,以及四个斜角方向(左上 / 右上 / 左下 / 右下)。
- 速度(像素/秒):每秒走多少像素,数值越大走得越快。
- 选了方向后,下面会展开「缓动」,让移动更自然:预设可选 线性(匀速)/ 开始缓动(起步慢)/ 结束缓动(快到时减速)/ 开始·结束缓动(两头都缓);还能用强度调缓动的明显程度,用开始缓动时长、结束缓动时长、启动延迟、结束延迟(都以毫秒计)微调加减速的节奏和首尾的停顿。
关键帧设置:让宠物跟着鼠标动
关键帧动画的原理,是把一段视频/GIF 的播放进度(从头到尾用 0 到 1 表示)交给鼠标来控制,而不是让它自动播。比如用一段「宠物转头看四周」的视频,就能做出「鼠标在左边它就往左看、鼠标转到右边它就往右看」的效果——这类规则怎么接鼠标,见下一节的「移动追踪」示例。
「关键帧设置」这个编辑器,管的是鼠标进度和视频进度之间的对应关系。点开后是一条横向的轨道,上面有几个可拖动的关键点,每个关键点表示「当鼠标进度到这里时,视频该播到哪一帧」:
- 添加:在轨道的空白处点一下,就新增一个关键点。
- 移动:按住关键点左右拖,就能改这个对应关系(把它往左/往右挪,等于让同样的鼠标位置对应到视频更早/更晚的画面)。
- 删除:点一下选中某个关键点,再按键盘 Delete 键删掉。
- 预览:轨道下方的预览会跟着你的拖动实时显示对应画面,边拖边看效果。
- 调乱了想重来,点「重置默认」恢复成均匀分布的默认关键点;调好后点「完成」关闭。
默认是 4 个均匀分布的关键点(0、0.25、0.5、0.75 一一对应),也就是鼠标进度和视频进度线性对应。多数情况下用默认就够了;只有当你想让某段画面「转得快一点/慢一点」时,才需要来这里手动调关键点。
05 / RULES
触发规则
让宠物对世界做出反应的核心机制
在「规则」标签页里可以新建、启用/停用、编辑、删除规则,还能导入 / 导出(从剪贴板或文件)。启用/停用直接点规则行左侧的勾选框即可,不必打开编辑器。保存时面板会做基本的冲突检查(例如多条高优先级规则互相打断),命中会在列表上方弹出「检测到 N 个潜在规则冲突」的提示。
点「添加新规则」打开规则编辑器,一条规则由四块组成:基本信息、触发条件、执行动作,以及(用到鼠标移动条件时才出现的)退出状态。基本信息区的几个控件:
| 控件 | 作用 |
|---|---|
| 名称 | 规则名,必填,方便自己辨认。 |
| 优先级 | 数字越大越先触发(默认 0)。规则按优先级从高到低依次匹配。 |
| 全局冷却时间(毫秒) | 这条规则触发后,所有非连续规则都要等这段时间才能再次触发,避免被连续刷。 |
| 命中后停止继续匹配 | 默认勾选。开启后这条规则一旦触发,就不再往下匹配优先级更低的规则。 |
| 执行策略 | 在「执行动作」区顶部:顺序(按顺序执行全部动作)或 随机(每次随机挑一个执行)。 |
| 退出条件 / 退出动作 | 只有当某个触发条件是「鼠标移动」时才会出现,用于状态型规则,见下方「规则编写实战」。 |
触发条件怎么填
「触发条件」决定什么时候执行这条规则。点「添加条件」会出现一张条件卡片,每张卡片都从「条件类型」下拉里选一种事件,比如点击、双击、右键点击、拖拽开始/拖拽中/拖拽结束、鼠标进入/离开/移动/静止、悬停时长、闲置时长、定时器、随机定时器、番茄钟完成等。
| 条件卡片里的控件 | 怎么用 |
|---|---|
| 条件类型 | 选择这条条件监听的事件。最常用的是点击、鼠标进入、鼠标移动、拖拽开始、拖拽结束、随机定时器。 |
| 必须 | 勾选后表示这条条件必须满足;取消勾选后表示它属于「可选条件」组,多个可选条件里命中任意一个即可。 |
| 高级筛选 | 点展开箭头后出现「筛选字段 / 操作符 / 筛选值」,用来把条件收窄。例如鼠标移动时可以筛「到宠物中心的距离 < 300」,点击时可以筛「是否在宠物内 = 真」。 |
| 定时器间隔 | 条件类型选「定时器」时会填写「间隔(毫秒)」;选「随机定时器」时填写「最小间隔(毫秒)」和「最大间隔(毫秒)」。 |
| 持续成立时间(毫秒) | 条件类型选「鼠标移动」并展开高级筛选时会出现。它要求筛选条件连续成立一段时间才触发,适合「靠近 3 秒后进入某状态」这类玩法。 |
每个触发条件卡片上有一个「必须」勾选,用来区分两种条件:必须条件需要在系统默认的短时间窗口内全部满足才算命中(系统默认会在约 1 秒内回看最近事件;这个时间窗口目前不在面板里单独设置);取消勾选的是可选条件,它们组成一个「任一命中即可」的候选组。
06 / DISPLAY
显示设置
宠物在桌面上「看起来」的样子
| 设置 | 范围/说明 |
|---|---|
| 缩放 | 50% - 300%,调整宠物窗口的显示大小。 |
| 透明度 | 50% - 100%,让宠物更融入桌面背景。 |
| 置顶显示 | 开启后宠物窗口始终显示在其他窗口之上。 |
| 鼠标穿透 | 开启后鼠标点击会「穿过」宠物窗口,作用到桌面或下层窗口,适合完全不想被打扰的场景。 |
| 重置位置 | 一键把宠物挪回配置中记录的默认坐标。 |
07 / SYSTEM
系统设置
开机启动、语言、日志与系统托盘
「系统」标签页管理和应用本身相关的设置:开机自动启动、界面语言(目前支持中文/英文,且带自动回退——找不到翻译会回退到英文,再回退到 key 本身,不会出现空白),以及运行日志。
日志区域可以开关日志记录、调整级别(trace
/ debug / info /
warn /
error)、选择查看某个日志文件、打开日志所在目录、刷新或清空日志——遇到问题时这是最快的排查入口。
系统托盘菜单
应用会在系统托盘(macOS 菜单栏 / Windows 任务栏通知区)放一个 Desktop Pet 图标。右键点击它可以展开菜单——当宠物被隐藏、跑出屏幕,或你临时不想打开面板时,这里是最快的入口。菜单里能做:
| 菜单项 | 作用 |
|---|---|
| 打开控制面板 | 打开完整的设置面板。 |
| 素材包 | 查看当前素材包,或导入新的 .petpack。 |
| 显示桌宠 | 隐藏或重新显示宠物窗口。 |
| 锁定拖拽 / 鼠标穿透 / 置顶显示 / 暂停交互 | 常用开关,和「显示」页的对应项一致,可就近切换。 |
| 缩放 / 不透明度 | 从预设档位里快速调整宠物大小和透明度。 |
| 重置位置 | 把宠物挪回默认坐标,找回跑到屏幕外的宠物。 |
| 查看日志 / 关于 / 退出 | 打开日志、查看版本信息、退出应用。 |
08 / RULE RECIPES
规则编写实战
拿「淘淘」宠物包里的规则当例子,边看边抄
所有规则都在控制面板的「规则」标签页里用编辑器创建。下面用官方示例包「淘淘」里的真实规则,逐条讲清楚在面板里怎么一步步搭出来;每条后面附一段完整的导入 JSON,点「复制」按钮,再到规则页选「导入规则 → 剪贴板」,就能直接装进程序。
规则的每个触发条件都从一个「条件类型」下拉里选,面板里能选的有:
| 分类 | 条件类型 |
|---|---|
| 指针 | 点击 / 双击 / 右键点击 / 鼠标进入 / 鼠标离开 / 鼠标移动 / 鼠标静止 |
| 拖拽 | 拖拽开始 / 拖拽中 / 拖拽结束 |
| 持续时长 | 悬停时长 / 闲置时长 |
| 计时器 | 定时器 / 随机定时器 |
| 系统 / 生命周期 | 应用启动 / 宠物包已加载 / 番茄钟完成 |
每个条件卡片都能展开「高级筛选」,用筛选字段 + 操作符 + 筛选值进一步限定。常用筛选字段有:是否在宠物内、到宠物中心的距离、到宠物边界的距离、速度、方向、鼠标角度进度、是否朝向宠物移动、拖拽距离、静止时间、已过时间、当前小时、星期几等;操作符就是 = != > >= < <= between in notIn;筛选值可以是数字、真/假,或用逗号分隔的多个值。
动作也从「动作类型」下拉里选,面板里能选的有:播放动画、设置关键帧进度、显示消息、随机消息、改变缩放、改变透明度、移动宠物、番茄钟、隐藏宠物、显示宠物、关闭交互、开启交互、重置位置、打开面板、空白动作、延时。其中「关闭交互 / 开启交互」成对开关鼠标穿透,让宠物暂时「不理人」;「延时」在动作序列里插入一段停顿;「空白动作」什么都不做,配合「随机」执行策略可以让宠物有一定概率毫无反应。
示例一 · 点击打招呼
点一下宠物,从两个动作里随机挑一个播放(点击-翻滚 或 抓虫子),7 秒内不重复触发。
- 「规则」页点添加新规则,名称填「点击打招呼」,优先级 50,全局冷却时间填 7000。
- 触发条件选点击(保持「必须」勾选,不加筛选就是点在宠物身上都算)。
- 执行动作加两条播放动画,分别选「点击-翻滚」和「抓虫子」。
- 执行策略选随机——每次点击只随机播其中一个。
{
"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),保证它压过其它右键相关规则。
- 添加新规则,名称「右键打开面板」,优先级 100,全局冷却 500。
- 触发条件选右键点击。
- 执行动作选打开面板(这个动作没有参数)。
{
"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 分钟)随机做个小动作,让宠物显得有点自己的生活。
- 添加新规则,名称「随机互动」,优先级 10,全局冷却 8000。
- 触发条件选随机定时器,最小间隔填 120000、最大间隔填 600000(毫秒,即 2–10 分钟)。
- 执行动作加四条播放动画:向右走、向左走、点击-舔毛、点击-打喷嚏。
- 执行策略选随机。
{
"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"
}
]
}
]
}
示例四 · 拖动开始 / 结束
拖起宠物时先「抓取」再进入「悬空」循环;松手时播「下落」。这里体现顺序执行:抓取(单次播放)播完后自动进入悬空(循环播放)并一直保持,直到松手被切走。
- 第一条规则名「拖动开始」,触发条件拖拽开始;执行动作按顺序加「播放动画:抓取」「播放动画:悬空」,执行策略保持顺序。
- 第二条规则名「拖动结束」,触发条件拖拽结束,全局冷却 2000;执行动作「播放动画:下落」。
下面这段 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"
}
]
}
]
}
示例五 · 专注模式与专注结束
双击宠物开始一次专注倒计时,同时播「入睡」再进入「睡觉」循环;倒计时结束后,再由另一条规则接住「番茄钟完成」事件,让宠物「醒来」并说一句话。这是一组前后配合的规则,建议放在一起看。
- 第一条规则名称「专注模式」,全局冷却 30000;触发条件选双击。
- 「专注模式」的执行动作按顺序:番茄钟(计时器命令选「开始」,持续时间 30000,计时器标签填「专注」)→「播放动画:入睡」→「播放动画:睡觉」。
- 第二条规则名称「专注结束」,全局冷却 7000;触发条件选番茄钟完成。
- 「专注结束」的执行动作按顺序:显示消息(消息文本填「休息好了 开始工作吧」,气泡最大宽度 220)→「播放动画:醒来」。
下面这段 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"
}
]
}
]
}
示例六 · 移动追踪(状态型规则)
鼠标在宠物附近持续移动时,宠物用关键帧动画「看鼠标」实时跟着鼠标方向转头;鼠标走远或停下一段时间后,自动回到默认动画。这类「进入某状态、满足条件再退出」的规则叫状态型规则。
- 添加新规则,名称「移动追踪」。
- 触发条件选鼠标移动,展开高级筛选:字段「到宠物中心的距离」、操作符 <、值 300;把「持续成立时间(ms)」填 5000(靠近并持续 5 秒才进入状态)。
- 执行动作选设置关键帧进度,动画选「看鼠标」,进度来源选「鼠标角度进度」。(因为有鼠标移动条件 + 设置关键帧进度动作,面板会自动把它当作连续规则。)
- 因为用了鼠标移动条件,编辑器会出现退出条件 / 退出动作两块。退出条件加两个「任一命中即可」的:鼠标移动 + 距离 > 400 持续 5 秒,或 鼠标静止 + 静止时间 > 5000。退出动作选「播放动画」→ 默认动画。
关键帧动画「看鼠标」是这样把鼠标方向换算成播放进度的:
| 鼠标在宠物的方向 | 进度值 |
|---|---|
| 上方 | 0 |
| 右侧 | 0.25 |
| 下方 | 0.5 |
| 左侧 | 0.75 |
{
"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"
}
]
}
}
]
}
示例七 · 隐身模式(成对进入 / 离开)
鼠标一进入宠物就隐藏,离开又出现——两条规则配成一对。淘淘包里这对默认是停用的,想玩就在规则行左侧勾选启用。
- 第一条:触发条件鼠标进入 → 执行动作隐藏宠物。
- 第二条:触发条件鼠标离开 → 执行动作显示宠物。
- 两条默认停用;导入后在规则列表里点左侧勾选框启用即可。
{
"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、即梦等生图模型,生成一张纯绿背景的宠物正面照。参考提示词:
把提示词里的「金渐层」换成你自己的宠物即可。绿色背景要纯、色值统一,后面抠图才干净。
第二步 · 生成绿幕动作视频
拿第一步的底图,用生视频模型生成不同动作的绿幕视频。实测用 Seedance 2.0 fast 效果不错——素材质量直接决定最终效果,这一步最值得多花时间打磨。
- 不要用首尾帧模式,改用「全能参考」,在提示词里说明「首帧从 xxx 开始,尾帧最后回到 xxx」——让动作首尾自然衔接,方便循环播放。
- 移动镜头类、幅度较大的动作,在提示词里补上:「镜头全程跟随猫,猫全程不出画,尾巴全程不出画,允许适当缩放保证猫身完整」,避免宠物移动时跑出画面或被裁掉。
第三步 · 导入并抠成透明
把生成的绿幕视频(.webm / .mp4 / .mov)在「资源」页导入(见「03 资源管理 · 导入单个资源」),再到「动画」页新建动画、绑定这个素材,打开「绿幕透明」把绿色背景抠掉(关键帧动画用「烘焙成透明 webm」)。之后就能在规则里使用这个动画了。
10 / FAQ
常见问题
遇到问题先看这里
为什么 petpack 导入失败?
常见原因:manifest.json 不在
ZIP 根目录;缺少
schemaVersion、packageId、
默认动画字段
等必填字段;动画 ID 不是 UUID;manifest
引用了不存在的素材;素材路径包含
..、绝对路径或反斜杠;文件格式不在支持列表;当前机器可用内存或磁盘余量不足以安全完成导入。
为什么动画不播放?
依次检查:这个动画有没有在「动画」页绑定真实存在的素材;规则的「播放动画」动作里有没有选中动画;规则左侧的启用开关有没有打开;条件筛选是不是太窄(比如「是否在宠物内」或距离阈值没满足);是不是有另一条更高优先级的循环播放规则一直在打断它。可以先去「总览」页看「事件历史」,确认你的操作有没有被系统捕捉到。
怎么做透明背景?
推荐使用带透明通道的 PNG、WebP、GIF 或 WebM。MP4/MOV 的透明能力依赖具体编码和平台支持,稳定性不如 WebM。 如果只有纯色背景的视频素材,可以用「动画设置」里的「绿幕透明」功能把背景抠成透明(做法见「素材制作」)。
从手册复制的规则导入后没反应?
「规则编写实战」里的示例 JSON 是按「淘淘」宠物包里的动画 ID 引用的。如果你当前用的不是「淘淘」包,导入后规则会找不到对应动画——需要打开规则,把每个「播放动画」动作重新选成你自己包里的动画。规则本身的逻辑(条件、冷却、优先级等)是通用的,照样能用。
petpack 里可以包含脚本吗?
不可以。petpack 只包含
manifest.json
和白名单格式的素材文件,不会执行任意脚本,这也是它能安全分享的前提。
可以同时安装多个宠物包吗?
可以导入并保留多个包,但当前配置中只有一个
currentPackageId
处于激活状态,也就是同一时间只有一只宠物在桌面上活动。可以在「资源」页切换当前宠物包。
点宠物没反应、拖不动怎么办?
多半是开启了「鼠标穿透」——这时点击、拖拽都会「穿过」宠物作用到桌面。去「显示」页或托盘菜单关掉「鼠标穿透」即可。另外托盘菜单里的「锁定拖拽」「暂停交互」也会让宠物暂时不响应,一并检查一下。
宠物跑到屏幕外面找不到了?
右键点击系统托盘图标 → 「重置位置」,或在「显示」页点「重置位置」,宠物会回到配置里记录的默认坐标。
找不到宠物窗口,怎么打开控制面板?
右键点击系统托盘里的 Desktop Pet 图标,选「打开控制面板」。托盘菜单里还能直接切换显示桌宠、鼠标穿透、置顶、缩放、不透明度等常用开关,以及导入素材包、查看日志。
改了设置需要重启应用吗?
不需要。面板里的动画、规则、显示等配置一旦保存就会写入本地文件,宠物窗口会实时重新加载并立即生效,无需重启。
可以开机自动启动吗?我的配置存在哪里?
在「系统」页可以打开「开机启动」。所有配置都保存在本机的
config.json,宠物包和素材存放在应用数据目录下的
packages/ 里,不会上传到任何服务器。
11 / SPONSOR
赞助作者
给作者一点算力支持,让 DesktopPet 能被更好地维护、迭代和长期发展
DesktopPet 是免费开源项目。如果它让你的桌面变得更有趣,欢迎通过下面的方式请作者喝杯咖啡——每一点支持都会变成下一次修复、优化和新功能。
也可以直接扫描上方支付宝或微信赞赏二维码。感谢每一份支持。
12 / ROADMAP
未来计划:社区广场
规则和宠物包的分享,现在架构已经准备好了
以下内容还没有开发,是基于现有架构推演出来的设计方向——如果你对这件事感兴趣,欢迎在 GitHub 上提出想法或参与建设。
资源包广场规划中
集中浏览社区制作的
.petpack,一键安装到本地。
- 按标签(画风、动物种类、动画数量、文件体积)搜索与筛选
- 预览动图、作者信息、版本变更记录
- 下载量、收藏、评分,帮助发现优质内容
- 「一键导入」本质仍是现有的下载 → 校验 → 原子安装流程,不需要新的信任模型
规则广场规划中
分享单条规则 JSON,而不是整份宠物包——专门用来交流「玩法」。
- 按条件类型、动作类型筛选,方便按玩法找灵感
- 「复制到当前包」把规则追加进本地触发规则
- 导入时自动做动画引用检查:规则里引用的动画剪辑如果本地没有,会提示先补上对应素材再启用
- 适合分享像「鼠标画圈会转圈圈」这类不需要换整套素材的巧妙规则
现有架构里,已经为这两个广场准备好的基础设施:
- petpack 本身是自包含的 ZIP + JSON manifest,天然适合上传、下载和版本管理;
- manifest 校验、素材格式白名单、资源耗尽保护、无脚本执行——分享内容默认是安全的静态资源;
-
schemaVersion字段已经为未来的格式演进留了扩展空间; - 规则的 JSON 结构和面板 UI 是同一份数据模型,规则广场不需要再设计一套「半成品」格式。