越来越多的人用 AI 把自己的宠物搬上桌面:家里的狗狗在程序坞上小跑,想念的猫咪趴在浏览器窗口上打盹。AI 画图这一步很简单,难的是把 AI 生成的图变成桌面宠物需要的准确格式。这篇教程两部分都会讲清楚。
✏️ 我们的宠物是手绘的,你的可以是任何样子。
Pets Therapy 自带的每一只宠物,都是我们的设计师一个像素一个像素手绘的,没有一只是 AI 做的。不过 AI 也能创作画面,所以我们为你打开了这扇门,让你做出属于自己的宠物:你家的狗、你家的猫、你们公司的吉祥物。你的自定义宠物只保存在你的电脑上,永远不会成为我们宠物库的一部分。
📦 下载示例宠物
一只完整、可用的宠物(mypet):JSON 加上所有帧,命名和尺寸都正确。解压看看你的宠物应该是什么样子,或者直接拿它当模板。
我能直接把这个页面发给 AI 吗?
可以,这也是最快的方法。把这个页面的链接,连同你家宠物的照片或描述,一起粘贴给能打开网页的 AI,它就能按照教程做出成品 ZIP 交给你。
请阅读这份教程,并按照它为我制作一个 Pets Therapy 自定义桌面宠物: https://pets-therapy.com/ai-custom-pets-zh.html 我的宠物:[附上宠物的照片,或者描述它,例如“一只圆滚滚的橘色小狐狸,尾巴尖是白色的”] 宠物 id:biscuit 请严格遵守教程里的文件格式(50×50 朝右的帧、文件命名、JSON 和 ZIP),绘制或生成 front、walk 和 drag 三个动画,最后把做好的 biscuit.zip 给我,我要导入 Pets Therapy。 如果你打不开这个链接,请告诉我,我会把教程里的提示词直接粘贴给你。
这个方法适用于能联网并运行代码的对话式 AI,以及你电脑上的编程助手(Claude Code、Codex、Cursor、Trae……)。如果你的 AI 打不开链接,或者结果不理想,就按下面的步骤来。每一步都有自己的提示词,可以边做边检查、边修改。
一个自定义桌面宠物需要哪些文件?
一只宠物就是一个文件夹:一些小小的 PNG 帧,加上一个 JSON 文件,一起压缩成 ZIP。每一帧都按 {id}_{animation}-{number}.png 命名。下面是应用能接受的最小宠物,id 为 biscuit:
front
2–6 帧,面朝你。会显示在宠物列表里,也会在宠物停下来看你时播放。
biscuit_front-0.png …
walk
4–8 帧,侧面,朝右。宠物向左走时,应用会自动镜像。
biscuit_walk-0.png …
drag
1–4 帧,宠物悬空晃荡。你用鼠标拖着它走时播放。
biscuit_drag-0.png …
biscuit.json
名字、速度、帧率和行为。由你的 AI 来写。
biscuit.json
帧都很小:大多数内置宠物使用 50 × 50 像素的画布,以每秒 10 帧播放。你不需要按这个尺寸画。生成大图就好,打包提示词会让 AI 在不模糊的情况下把它缩小。
第 1 步:怎样把宠物照片变成像素画?
把照片上传到对话式 AI 绘图工具,让它把这只动物画成粗犷的像素风角色:全身、侧面朝右、纯洋红色背景。
在绘图工具里新开一个对话,之后的所有步骤都留在这个对话里。对 AI 来说,最难的是保持角色一致,而始终在同一个对话里(以第一张图作为参考)比什么技巧都管用。
方式 A:用你家宠物的照片
附上一张清晰、光线充足、能看到全身的照片,然后粘贴:
把附件照片里的动物变成一个可爱的像素风电子游戏角色。 风格:90 年代掌机游戏那种粗犷复古的像素画,整个身体大约 48×48 像素,1 像素深色描边,平涂颜色加一层阴影,不要抗锯齿,不要渐变,不要模糊。 完全保留照片里它真实的毛色、花纹、耳朵形状、眼睛颜色和尾巴,让主人一眼就能认出来。 姿势:全身,侧面,朝右,四只脚站立。 背景:纯洋红色(#FF00FF)铺满整张图。不要阴影,不要地面,不要文字,不要边框。
方式 B:用一个创意
设计一个可爱的像素风电子游戏角色:一只圆滚滚的橘色小狐狸,蓬松的尾巴尖是白色的,有一双黑亮的大眼睛。 风格:粗犷复古的像素画,整个身体大约 48×48 像素,1 像素深色描边,平涂颜色加一层阴影,不要抗锯齿,不要渐变。 姿势:全身,侧面,朝右,站立。 背景:纯洋红色(#FF00FF)铺满整张图。不要阴影,不要地面,不要文字。
反复修改,直到你满意为止(“耳朵再大一点”“颜色少一点”“更像照片一点”)。这张图就是你的参考图,之后的每条提示词都会说“同一个角色”。
💡 为什么用洋红色,而不是“透明”背景?
- 如果让大多数 AI 工具生成透明背景,它们会在图里画出一个灰白棋盘格。看起来像透明,其实不是。
- 一个宠物身上完全没有的纯色,去掉起来非常简单。洋红色
#FF00FF是经典选择;如果宠物是粉色或紫色的,就用亮绿色#00FF00。 - 如果你的工具真的能导出透明 PNG,那更好:告诉 AI 不需要去背景。
第 2 步:怎样让 AI 画出走路循环的精灵图?
在同一个对话里,让 AI 把“同一个角色”画成一行 4–6 帧:朝右,帧之间留空白,每一帧的地面线都相同。
每个动画都要求画成精灵图:一行横排的帧,帧之间留空白。正是这些空白,让 AI 在第 3 步里能干净地把帧切开。
走路(必需)
用完全相同的角色,画一张走路循环的精灵图(sprite sheet)。 6 帧排成一行,间距均匀,每帧之间留出清楚的空白背景。 每一帧都是侧面朝右。每一帧的大小、比例和地面线都相同;只有腿、尾巴和身体 1 像素的上下起伏在变化,让最后一帧能流畅地接回第一帧。 同样的像素风格:1 像素深色描边,平涂颜色,不要抗锯齿。 纯洋红色(#FF00FF)背景。不要阴影,不要文字,不要帧编号,不要网格线。
正面(必需)
同一个角色,现在面朝观众(正面),坐着。 做一个 4 帧的待机动画,排成一行,帧之间留空白: 第 1 帧正常,第 2 帧闭眼(眨眼),第 3 帧正常,第 4 帧头稍微歪一下。 每一帧的大小和位置完全一致。同样的像素风格和描边。 纯洋红色(#FF00FF)背景。不要阴影,不要文字。
被拎起(必需)
同一个角色被拎着后颈提起来:正面,身体笔直垂下,四条腿悬空晃荡,表情有点惊讶。 2 帧排成一行,中间留空白;第 2 帧里腿稍微甩向一侧。 同样的大小和像素风格。纯洋红色(#FF00FF)背景。不要画手,不要阴影,不要文字。
额外动画(可选,但宠物能做的事更多)
这些动画会解锁应用里的右键动作:睡觉、进食、放松(idle)和撒娇(love)。有了食物,你还能在“宠物互动”窗口里喂它。宠物平时也会时不时自己播放这些动画。
同一个角色蜷成一团睡在地上,侧面朝右。 4 帧排成一行,帧之间留空白:身体随呼吸轻轻起伏 1 像素,第 3 和第 4 帧头顶飘着一个小小的“z”。 同样的大小和像素风格。纯洋红色(#FF00FF)背景。不要阴影,除了“z”以外不要文字。
同一个角色在吃东西,侧面朝右,头低向地面。 4 帧排成一行,帧之间留空白:低头、咀嚼、头稍微抬起、再咀嚼。 同样的大小、同样的地面线和像素风格。纯洋红色(#FF00FF)背景。不要碗,不要阴影,不要文字。
画一个这个角色会喜欢的小小像素风食物(比如一条鱼、一根骨头、一根胡萝卜或一粒种子),和角色用同样的像素风格和描边。 它要很小,大约是角色身高的三分之一,而且宽度大于高度。 放在纯洋红色(#FF00FF)背景的正中间。不要盘子,不要阴影,不要文字。
不同工具的小技巧
💬 对话式工具(ChatGPT、Gemini、豆包、通义千问……)
最简单的方式。所有内容都在一个对话里完成,提到“第一张图里的角色”,并且一次只改一处:“同一张图,但第 4 帧的后腿不对”。
🎨 Midjourney
用它的角色/图片参考功能,引用第 1 步的图片,横排的精灵图用宽画幅(例如 --ar 3:1)。它容易加上柔和的阴影,所以要写上“平涂颜色,不要渐变”。
🖥️ Stable Diffusion(本地)
像素风 LoRA 加上姿势 ControlNet,画出的走路循环最一致。按固定姿势一帧一帧生成,然后在第 3 步里作为单独的文件交给 AI。
💡 当 AI 画得前后不一致时
第 3 步:怎样把 AI 生成的图变成一只完整的宠物?
让同一个 AI 来打包。粘贴下面的提示词,它就会切帧、去背景、调整尺寸、给每个文件命名、写好 JSON 并打包成 ZIP,前提是在能运行代码的对话里,或者作为你电脑上的编程助手。
把这个对话里的精灵图打包成一个 Pets Therapy 自定义宠物。请用代码处理,并给我一个可以下载的 ZIP。
宠物 id:biscuit(只用小写字母和数字,不要空格,不要下划线)。
动画:front、walk 和 drag 是必需的;如果我做了 sleep 和 eat,也一起加进去。
对每一张精灵图:按从左到右的顺序把它切成单独的帧,并去掉纯色背景。
每个动画的帧规则:
- 背景完全透明;每个像素要么完全不透明,要么完全透明(不要半透明的柔边)。
- 同一个动画的所有帧使用同一个裁剪框,这样宠物不会抖动;脚要贴住图片底边。
- 只用最近邻(nearest-neighbour)缩放,绝不平滑缩放,放到 50×50 像素的透明画布上,底部居中。
- walk、eat、sleep 的帧必须朝右(宠物向左走时,应用会自动镜像)。
- 保存为 PNG,命名为 {id}_{animation}-{n}.png,从 0 开始连续编号,例如 biscuit_walk-0.png。
然后严格按下面的格式写 biscuit.json:
{
"id": "biscuit",
"movementPath": "walk",
"dragPath": "drag",
"fps": 10,
"speed": 0.8,
"scale": 1,
"zIndex": 0,
"tags": [],
"capabilities": [
"AnimatedSprite", "AnimationsProvider", "AnimationsScheduler", "AutoRespawn",
"BounceOnLateralCollisions", "Draggable", "FlipHorizontallyWhenGoingLeft",
"Gravity", "LinearMovement", "PetsSpritesProvider", "Rotating", "ShowsMenuOnRightClick"
],
"animations": [
{ "id": "front", "position": "fromEntityBottomLeft", "requiredLoops": 5 }
]
}
如果有 sleep 或 eat 的帧,也把它们加到 "animations" 里:
{ "id": "sleep", "position": "fromEntityBottomLeft", "requiredLoops": 10 },
{ "id": "eat", "position": "fromEntityBottomLeft", "requiredLoops": 3 }
把 biscuit.json 和所有 PNG 放进一个叫 biscuit 的文件夹,压缩成 biscuit.zip,并列出里面的文件让我检查。
或者跳过绘图工具:让编程助手画出整只宠物
在你电脑上运行的编程助手(Claude Code、Codex、Cursor、Trae 等),以及能运行代码的对话式 AI,可以直接根据一段描述用代码画出像素画,并写出成品 ZIP。改一改描述,然后粘贴:
根据下面的描述,做一个 Pets Therapy 自定义桌面宠物:
“一只圆滚滚的橘色小狐狸,蓬松的尾巴尖是白色的,有一双黑亮的大眼睛。”
请你自己用代码画出像素风的帧(例如用 Python 和 Pillow):可爱粗犷的复古像素画,1 像素深色描边,平涂颜色加一层阴影,有限的调色板,每一帧都是同一个角色。
需要画的动画:
- front:4 帧,面朝观众坐着(正常、眨眼、正常、头稍微歪一下)
- walk:6 帧,侧面朝右,流畅循环的走路动画(只有腿和尾巴在动,加上身体 1 像素的上下起伏)
- drag:2 帧,宠物被拎着后颈提起来,四条腿悬空轻轻晃
- sleep:4 帧,蜷成一团,随呼吸起伏 1 像素
- eat:4 帧,低头到地面,咀嚼
宠物 id:biscuit(只用小写字母和数字,不要空格,不要下划线)。
每个动画的帧规则:
- 背景完全透明;每个像素要么完全不透明,要么完全透明(不要半透明的柔边)。
- 同一个动画的所有帧使用同一个裁剪框,这样宠物不会抖动;脚要贴住图片底边。
- 只用最近邻(nearest-neighbour)缩放,绝不平滑缩放,放到 50×50 像素的透明画布上,底部居中。
- walk、eat、sleep 的帧必须朝右(宠物向左走时,应用会自动镜像)。
- 保存为 PNG,命名为 {id}_{animation}-{n}.png,从 0 开始连续编号,例如 biscuit_walk-0.png。
然后严格按下面的格式写 biscuit.json:
{
"id": "biscuit",
"movementPath": "walk",
"dragPath": "drag",
"fps": 10,
"speed": 0.8,
"scale": 1,
"zIndex": 0,
"tags": [],
"capabilities": [
"AnimatedSprite", "AnimationsProvider", "AnimationsScheduler", "AutoRespawn",
"BounceOnLateralCollisions", "Draggable", "FlipHorizontallyWhenGoingLeft",
"Gravity", "LinearMovement", "PetsSpritesProvider", "Rotating", "ShowsMenuOnRightClick"
],
"animations": [
{ "id": "front", "position": "fromEntityBottomLeft", "requiredLoops": 5 }
]
}
如果有 sleep 或 eat 的帧,也把它们加到 "animations" 里:
{ "id": "sleep", "position": "fromEntityBottomLeft", "requiredLoops": 10 },
{ "id": "eat", "position": "fromEntityBottomLeft", "requiredLoops": 3 }
把所有文件写进一个叫 biscuit 的文件夹,压缩成 biscuit.zip,然后给我看一张把所有帧放大 4 倍的预览图,方便我检查。
💡 怎样得到干净的结果
第 4 步:宠物的 JSON 文件里写什么?
宠物的 id、走路和被拎起时用哪个动画、速度和帧率,以及一组标准的行为。打包提示词会让 AI 替你写好。
AI 生成的 ZIP 里已经包含这个文件了。如果你是手工做的帧,就把下面的内容保存为 biscuit.json(把两处 id 都换成你自己的)。它可以直接导入:
{
"id": "biscuit",
"movementPath": "walk",
"dragPath": "drag",
"fps": 10,
"speed": 0.8,
"scale": 1,
"zIndex": 0,
"tags": [],
"capabilities": [
"AnimatedSprite",
"AnimationsProvider",
"AnimationsScheduler",
"AutoRespawn",
"BounceOnLateralCollisions",
"Draggable",
"FlipHorizontallyWhenGoingLeft",
"Gravity",
"LinearMovement",
"PetsSpritesProvider",
"Rotating",
"ShowsMenuOnRightClick"
],
"animations": [
{ "id": "front", "position": "fromEntityBottomLeft", "requiredLoops": 5 }
]
}
| 字段 | 作用 | 推荐值 |
|---|---|---|
id | 唯一名称,也是每个 PNG 文件名的前缀。只用小写字母和数字;不要下划线(下划线用来分隔 id 和动画名)。 | biscuit、mrwhiskers |
movementPath | 走路时用的动画。对应的帧必须存在。 | walk |
dragPath | 你拖着宠物时用的动画。对应的帧必须存在。 | drag |
fps | 所有动画的每秒帧数。 | 8–12(最多 20) |
speed | 走路速度。 | 0.5(慢)– 1.2(飞快) |
scale | 屏幕上的大小倍数(可选)。 | 1 – 1.5 |
tags、zIndex | 应用要求必须有;保持示例里的值即可。 | []、0 |
capabilities | 行为:重力、拖动、翻转、右键菜单……加上 RandomPlatformJumper 就能让它跳到窗口上。 | 上面的列表 |
animations | 宠物会时不时自己播放的额外动画,以及每个动画循环几次。 | 见下文 |
如果你生成了 sleep、eat、idle 或 love 的帧,把它们加到 animations 里,宠物就会自己播放它们:
"animations": [
{ "id": "front", "position": "fromEntityBottomLeft", "requiredLoops": 5 },
{ "id": "sleep", "position": "fromEntityBottomLeft", "requiredLoops": 10 },
{ "id": "eat", "position": "fromEntityBottomLeft", "requiredLoops": 3 }
]
或者让 AI 来写
为我的自定义桌面宠物写一个 Pets Therapy 物种 JSON 文件。规则:
- 只输出合法的 JSON,不要注释。
- 必需的键:id、movementPath、dragPath、fps、speed、zIndex、tags、capabilities、animations。可选:scale。
- id:"biscuit"(小写,不要下划线)。movementPath:"walk"。dragPath:"drag"。zIndex:0。tags:[]。
- fps:10。speed:0.8(这是一只安静的宠物)。scale:1。
- capabilities 必须正好是:AnimatedSprite, AnimationsProvider, AnimationsScheduler, AutoRespawn, BounceOnLateralCollisions, Draggable, FlipHorizontallyWhenGoingLeft, Gravity, LinearMovement, PetsSpritesProvider, Rotating, ShowsMenuOnRightClick。
- animations:一个由 { "id", "position": "fromEntityBottomLeft", "requiredLoops" } 组成的数组,包括:front(5 次循环),以及我有帧的额外动画:sleep(10 次循环)、eat(3 次循环)。
然后按 {id}_{animation}-{number}.png 的格式,列出我需要的 PNG 文件名。
第 5 步:怎样把自定义宠物导入 Pets Therapy?
把 JSON 和 PNG 文件一起压缩,打开 Pets Therapy 的“信息”页面,把 ZIP 拖到“创造你自己的宠物!”区域。Mac、Windows 和 Linux 上的操作都一样。
你的文件夹应该是这样的,所有文件要么直接放在最外层,要么放在同一个文件夹里:
biscuit/
├── biscuit.json
├── biscuit_front-0.png … biscuit_front-3.png
├── biscuit_walk-0.png … biscuit_walk-5.png
├── biscuit_drag-0.png biscuit_drag-1.png
├── biscuit_sleep-0.png …(可选)
└── biscuit_food-0.png (可选)
压缩:在 macOS 上,右键点击文件夹 → 压缩。在 Windows 上,右键 → 发送到 → 压缩(zipped)文件夹(Windows 11 上是压缩为 ZIP 文件)。AI 给你的下载文件本来就是 ZIP,用了它就可以跳过这一步。
🍎 macOS
支持- 打开 Pets Therapy。
- 进入“信息”页面。
- 在“创造你自己的宠物!”下面,把 ZIP 拖到虚线框“将您的压缩文件拖放到这里”里。
- 在宠物列表里找到你的宠物,把它添加到屏幕上。
🪟 Windows 和 🐧 Linux
支持- 打开 Pets Therapy(宠物管理窗口)。
- 进入“信息”页面。
- 把 ZIP 拖到“创造你自己的宠物!”区域,或者点击它来选择文件。
- 在宠物列表里找到你的宠物,把它添加到屏幕上。
自定义宠物还能做什么?
- 起个昵称:在 macOS 上,打开宠物详情,点击“更改昵称”。
- 喂它吃东西:有了
eat动画和{id}_food-0.png,你的宠物就会和内置宠物一样出现在“宠物互动”窗口里。 - 太小或太大?修改 JSON 里的
scale(或者让 AI 改),也可以用应用里的宠物大小滑块。 - 改了东西?在应用里宠物的详情页删除它,然后导入新的 ZIP。
为什么我的自定义宠物导入不了?
几乎都是因为文件名和 JSON 里的 id 对不上,或者缺少 walk 或 drag 的帧。下面列出了应用显示的每一种错误提示。macOS 版显示中文提示;Windows 和 Linux 版目前显示英文提示(括号里)。
| 你看到的 | 原因 | 解决办法 |
|---|---|---|
“似乎缺少什么些东西 (biscuit_walk)”(或 _drag)Missing required file: biscuit_walk | PNG 文件名和 JSON 里的 id + movementPath/dragPath 对不上。 | 把文件严格重命名为 {id}_walk-0.png……文件名区分大小写。 |
| “似乎缺少什么些东西 (<species>.json)” Missing required file: <species>.json | ZIP 里没有 JSON,或者它嵌套了两层文件夹。 | 把 JSON 和 PNG 放在一起,要么在最外层,要么在同一个文件夹里。 |
| “您的 json 文件中有一些错误……” Invalid species.json file | 有拼写错误(多余的逗号、缺少引号)或缺少必需的键。 | 从上面的模板开始,再用任意 JSON 校验工具检查一遍。 |
| “似乎 biscuit 已经存在!” A pet with ID "biscuit" already exists | 已经安装了一只同 id 的宠物。 | 在应用里删掉旧的,或者换一个新的 id(PNG 也要一起改名)。 |
| 宠物倒着走(太空步) | walk 的帧朝左。 | 让 AI 把 walk 的帧镜像过来。宠物必须朝右。 |
| 宠物抖动或上下跳 | 各帧没有对齐在同一条地面线上。 | 让 AI 把同一个动画的所有帧裁成同一个框,脚贴住底边。 |
| 宠物周围有一圈粉色或绿色的边 | 去背景后留下了半透明的边缘像素。 | 让 AI 把每个像素都变成完全不透明或完全透明。 |
| 宠物看起来模糊 | 缩放时用了平滑插值。 | 让 AI 只用最近邻缩放。千万别用修图软件默认的缩放。 |
| 宠物飘在窗口上方 | 帧里脚下还有空白。 | 让 AI 裁剪帧,让脚贴住底边。 |
| 宠物在列表里是空白的 | 没有 front 帧。 | 加上 {id}_front-0.png(一帧也行)。 |
哪里能找到更多提示词?
AI 像素宠物提示词库 (EN) 里有 24 条现成的角色提示词(用照片生成狗、猫、兔子、马、爬宠;用描述生成柯基、小熊猫、龙、史莱姆、吉祥物等等),还有所有动画提示词,包括“放松”和“撒娇”。提示词是英文的,但大多数 AI 工具都能直接看懂。
这比自制 Shimeji 简单吗?
简单得多。一个 Shimeji-ee 角色需要一整套 46 张编号图片;一个 Pets Therapy 宠物最少只需要三个短动画,用一个 ZIP 就能导入。
| 自制 Shimeji(Shimeji-ee) | 自制 Pets Therapy 宠物 | |
|---|---|---|
| 需要的图片 | 一整套:shime1.png … shime46.png,所有姿势 | 最少 3 个动画(front、walk、drag) |
| 文件命名 | 编号位置,要自己对应到各个姿势 | 按动画命名:biscuit_walk-0.png |
| 安装 | 把图片文件夹复制进程序,需要 Java | 在“信息”页面放入一个 ZIP |
| 平台 | Windows;Mac 上需要折腾 | Mac、Windows 和 Linux 原生运行 |
| 对 AI 友好的工具 | 没有 | 可直接复制的提示词,让 AI 做出整只宠物 |
从 Shimeji 转过来?看看 Shimeji 替代品 (EN)和 在 Mac 上用 Shimeji (EN)。