DeepSHPlugins
Awesome-DSH-Pet 项目预览
GITHUB / COMMUNITY PROJECT

Awesome-DSH-Pet

娱乐JavaScriptMIT

DSH Web GUI 的可扩展桌面宠物插件,支持投喂、玩耍、切换角色,并使用 Codex 8x9 spritesheet 添加自定义角色。

3 StarsAwesome-AI-Pedia 更新时间 2026-08-19
访问 GitHub 仓库
Awesome-DSH-Pet 项目预览

项目介绍

中文

DSH Web GUI 的可扩展桌面宠物插件,支持投喂、玩耍、切换角色,并使用 Codex 8x9 spritesheet 添加自定义角色。

English

Extensible desktop-pet plugin for the DSH Web GUI, with feed / play / character-switch menus and Codex 8x9 spritesheet characters.

项目信息与收录信号

快照 2026-09-11
作者 / 组织
Awesome-AI-Pedia
仓库
Awesome-AI-Pedia/Awesome-DSH-Pet
GitHub Stars
3
Forks
0
开发语言
JavaScript
许可证
MIT
最近推送
2026-08-19
Manifest
数据中检测到声明

公开仓库不自动等于可商用;许可证与当前兼容性以原项目文档为准。Manifest 和数据评分不构成安装安全认证。

数据评分

56/ 100
维护活跃
85
文档与实用信息
85
生态关注度
17
安装便捷信号
75
项目声明信号
100

近 23 天仍在更新;README 含完整安装与使用说明;关注度尚低(3)。

评分来自已有数据快照的五维模型,仅作浏览参考,不是实际使用评测或安全检测结论。

安装与使用

所有项目资料与许可均以对应 GitHub 仓库为准。

dsh plugin --profile web add github:Awesome-AI-Pedia/Awesome-DSH-Pet

复制命令不会自动执行。请先阅读仓库文档,确认环境要求与许可证。

项目截图

仓库 README

GitHub 原文

已保存的仓库文档快照;文档抓取时间未记录,可能与上方目录介绍处于不同版本。安装前请核对当前仓库说明。

Awesome DSH Pet

DSH Web GUI 内的可扩展桌面宠物插件。

  • jingyu-zongcai:鲸鱼总裁
  • lulu-capybara:噜噜

安装

dsh plugin --profile web add /Users/icourt/Desktop/DSH-plugin/Awesome-DSH-Pet

安装或更新后重启 web。插件会在页面右下角显示桌面宠物,菜单里可以投喂、玩耍、切换角色。

配置

settings.yaml 中使用 awesome-dsh-pet: section:

awesome-dsh-pet:
  enabled: true
  size: 110
  opacity: 1
  walk:
    enabled: true
  sleepAfterMs: 60000

快速添加你自己的宠物

三步走:放素材 → 改 manifest → 跑门禁。

1. 起个角色 id 并放素材

角色 id 只允许 [a-z0-9-](会当 URL 路径用)。示例用 my-cat。

把 Codex 标准 8×9 spritesheet 放到:

lib/assets/characters/my-cat/spritesheet.webp

Codex atlas 规范:8 列 × 9 行,每格 192×208(像素)。行含义:

row用途
0idle
1running-right / walk / drag
2running-left
3waving / welcome / celebrate
4jumping / play
5failed / error / disappointed
6waiting
7running / working
8review / think
如果你手里只有一堆单行动作 sheet(不是 atlas),也支持——见下方"素材两种形式"。

2. 在 lib/assets/manifest.json 增加角色

在 characters 下加一个 key:

{
  "characters": {
    "my-cat": {
      "name": "我的猫",
      "credit": "你的名字",
      "description": "一句话人设。",
      "meta": {
        "stageSize": 110,
        "atlas": { "columns": 8, "rows": 9, "cellWidth": 192, "cellHeight": 208 }
      },
      "states": {
        "idle":         { "sheet": "spritesheet.webp", "row": 0, "rows": 9, "frames": 8, "fps": 4, "playback": "blink" },
        "working":      { "sheet": "spritesheet.webp", "row": 7, "rows": 9, "frames": 8, "fps": 6, "playback": "loop" },
        "celebrate":    { "sheet": "spritesheet.webp", "row": 3, "rows": 9, "frames": 8, "fps": 6, "playback": "loop" },
        "error":        { "sheet": "spritesheet.webp", "row": 5, "rows": 9, "frames": 8, "fps": 8, "motion": "shake", "playback": "once" },
        "disappointed": { "sheet": "spritesheet.webp", "row": 5, "rows": 9, "frames": 8, "fps": 4, "playback": "loop" },
        "joy":          { "sheet": "spritesheet.webp", "row": 3, "rows": 9, "frames": 8, "fps": 6, "playback": "loop" },
        "eat":          { "sheet": "spritesheet.webp", "row": 3, "rows": 9, "frames": 8, "fps": 6, "playback": "loop" },
        "play":         { "sheet": "spritesheet.webp", "row": 4, "rows": 9, "frames": 8, "fps": 6, "playback": "loop" },
        "drag":         { "sheet": "spritesheet.webp", "row": 1, "rows": 9, "frames": 8, "fps": 8, "playback": "loop" },
        "walk":         { "sheet": "spritesheet.webp", "row": 1, "rows": 9, "frames": 8, "fps": 8, "playback": "pingpong" },
        "sleep":        { "sheet": "spritesheet.webp", "row": 0, "rows": 9, "frames": 8, "fps": 2, "playback": "loop" },
        "wake":         { "sheet": "spritesheet.webp", "row": 3, "rows": 9, "frames": 8, "fps": 6, "playback": "once" },
        "welcome":      { "sheet": "spritesheet.webp", "row": 3, "rows": 9, "frames": 8, "fps": 6, "playback": "loop" },
        "think":        { "sheet": "spritesheet.webp", "row": 8, "rows": 9, "frames": 8, "fps": 4, "playback": "loop" },
        "wait":         { "sheet": "spritesheet.webp", "row": 6, "rows": 9, "frames": 8, "fps": 4, "playback": "loop" }
      }
    }
  }
}

必备 15 状态一个都不能少:idle / working / celebrate / error / disappointed / joy / eat / play / drag / walk / sleep / wake / welcome / think / wait。

上面的 atlas 行映射是通用模板,直接复制改角色 id 即可跑起来。想让某个状态换动作(例如 eat 走单独的表情),改对应条目的 row 或 sheet 即可。

想把新角色作为默认,把顶层的 "default": "jingyu-zongcai" 改成 "my-cat"。

3. 校验并重装

node scripts/gates/verify-assets.mjs   # 门禁:素材完整性 + manifest 一致性
node --test 'tests/*.test.mjs'         # 单测
dsh plugin --profile web add /Users/icourt/Desktop/DSH-plugin/Awesome-DSH-Pet   # 更新后重启 web

门禁会告诉你缺哪个状态、sheet 文件不存在、frames/fps 不合法等——按报错逐条修就行。

素材两种形式

  • Codex atlas 行(推荐):{ "sheet": "spritesheet.webp", "row": 0, "rows": 9, "frames": 8, "fps": 4, "playback": "loop" }
  • 单行动作 sheet:{ "sheet": "idle.png", "frames": 3, "fps": 4, "playback": "loop" }

字段速查

字段说明
sheet相对 lib/assets/characters/<id>/ 的文件名。允许 .png / .webp / .svg / .jpg / .jpeg / .gif / .json
frames帧数(正整数)。PNG 多帧图必须满足 宽度 = frames × 高度(横排帧图)
fps播放帧率
row / rowsatlas 行索引与总行数;row < rows
playbackloop / pingpong / once / blink。最小帧数:pingpong≥2、blink≥2,其他 ≥1
motion可选运动配方:bob / wiggle / squash / shake / sigh / hop / tilt / float / wave。要求 frames === 1(error 是唯一例外,可以多帧 + 运动叠加)

开发

node scripts/build-client.mjs
node scripts/gates/verify-assets.mjs
node --test 'tests/*.test.mjs'

lib/client.js 是构建产物,改 lib/client/index.mjs 后运行 node scripts/build-client.mjs 重新生成。

使用前核对

安装步骤、兼容版本与授权范围以原项目当前文档为准。Stars 和评分是快照中的导航信号。

安装与排错 · 项目问题反馈

同类项目