moon-partner/dsh-anime25d-pets-v2 ↗★ 1

dsh-anime25d-pets

Anime2.5DRig × DSH pet: PSD auto-rig 2.5D desktop pet using Anime2.5DRig rendering instead of Live2D 适合想要在DSH界面中添加可拖动、可调节参数的2.5D互动桌宠的用户。

Package
dsh-anime25d-pets
Compatibility
Unverified
Harness peer range
^0.1.0-rc.6 || ^0.1.2-rc.1
Cordis peer range
^4.0.1
Version
0.3.0
License
NOASSERTION
Last updated
Oct 3, 2026

Other repositories with this package name

Install

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:moon-partner/dsh-anime25d-pets-v2

最小配置示例

  1. 安装插件(见上文)
  2. 启动 DSH,右下角出现默认宠物(内置 Anim2.5DRig 示例 PSD 模型)
  3. 添加自己的 PSD 模型:
    • 打开 DSH 设置 →「桌宠配置」→「我的模型」
    • 填写名称和 .psd 地址(支持 HTTP URL 或本地绝对路径)
    • 点击保存
  4. 使用:
    • 将鼠标移到桌宠上,右下角会浮出 ⚙ 设置按钮,点击打开角色调节面板
    • 拖动滑块实时调整头部/眼睛/眉毛/嘴巴/发型/身体参数
    • 切换"随机开口说话""随机小动作"和"左右翻转桌宠"开关
    • 在 DSH「桌宠配置」设置页可调整帧率限制(30/60/无限制)和透明度(含气泡)
    • 拖动桌宠到任意位置(自动保存)

settings.yaml 中 anime25d-pet 部分的参考配置

anime25d-pet: enabled: true size: 200 model: sample # 使用内置示例模型 animeParams: angleX: 0.2 # 左右转头 mouthOpen: 0.3 # 嘴巴张开 talk: true # 随机开口说话 rand: false # 随机小动作 flip: false # 左右镜像翻转 fpsLimit: 30 # 帧率限制(30 / 60 / 0=无限制) opacity: 1.0 # 宠物透明度(0~1,含气泡) persona: tsundere


---

## 配置说明

### settings.yaml 配置项

| 配置项 | 类型 | 默认值 | 说明 |
|--------|------|--------|------|
| `enabled` | boolean | `true` | 插件总开关 |
| `size` | number | `160` | 宠物尺寸(40~400 px) |
| `model` | string | `sample` | 模型 ID(内置 preset 或自定义模型 ID) |
| `animeParams` | object | `{}` | Anime2.5D 参数滑块(34 个参数) |
| `talk` | boolean | `false` | 随机开口说话 |
| `rand` | boolean | `false` | 随机小动作 |
| `flip` | boolean | `false` | 左右镜像翻转桌宠(浮动面板同步管理) |
| `fpsLimit` | number | `30` | 帧率限制(30 / 60 / 0=无限制) |
| `opacity` | number | `1` | 宠物透明度(0~1,含气泡,DSH 设置页可调) |
| `persona` | string | `tsundere` | 人设 ID |
| `developerMode` | boolean | `false` | 开发者模式 |
| `debug` | boolean | `false` | 调试面板 |
| `showTapZones` | boolean | `false` | 显示点击分区 |

### Anime2.5D 参数(34 个)

| 分组 | 参数 | 范围 | 默认 |
|------|------|------|------|
| 头部姿态 | `angleX` / `angleY` / `angleZ` | -1 ~ 1 | 0 |
| 眼睛 | `eyeOpenL` / `eyeOpenR` | 0 ~ 1 | 1 |
| 眼睛 | `eyeX` / `eyeY` | -1 ~ 1 | 0 |
| 眼睛 | `irisScale` | 0.5 ~ 1.3 | 1 |
| 眼睛 | `eyeScaleL` / `eyeScaleR` | 0.5 ~ 1.5 | 1 |
| 眼睛 | `eyeEase` | 0 ~ 1 | 0.3 |
| 眼睛 | `eyeCY` / `eyeCAng` | -1 ~ 1 | 0 |
| 眉毛 | `brow` | -1 ~ 1 | 0 |
| 眉毛 | `browAngSym` / `browAngL` / `browAngR` | -1 ~ 1 | 0 |
| 嘴巴 | `mouthOpen` | 0 ~ 1 | 0 |
| 嘴巴 | `mouthForm` | -1 ~ 1 | 0 |
| 嘴巴 | `mouthCY` / `mouthCAng` | -1 ~ 1 | 0 |
| 嘴巴 | `mouthEase` | 0 ~ 1 | 0.45 |
| 嘴巴 | `mouthScale` | 0.5 ~ 1.5 | 1 |
| 发型 | `fhAmp` | 0 ~ 3 | 2 |
| 发型 | `fhSoft` | 0 ~ 2 | 0.4 |
| 发型 | `bangL` / `bangC` / `bangR` | -1 ~ 1 | 0 |
| 身体物理 | `body` | -1 ~ 1 | 0 |
| 身体物理 | `armY` / `armPos` | -1 ~ 1 | 0 |
| 身体物理 | `bust` | 0 ~ 5 | 2.5 |
| 身体物理 | `bustY` | -1 ~ 3 | 1 |
| 身体物理 | `physAmp` | 0 ~ 3 | 2 |
| 身体物理 | `soft` | 0 ~ 2 | 2 |

### 环境变量

| 变量 | 说明 |
|------|------|
| `DSH_HOME` | DSH 配置目录(默认 `~/.dsh`) |

### 敏感项

无。本插件不存储凭据、不访问用户敏感数据。

---

## 权限与数据

| 数据/资源 | 访问方式 | 说明 |
|-----------|---------|------|
| 本地 PSD 文件 | `node:fs` 读取 | 仅在用户配置了本地模型路径时读取 |
| 设置配置 | DSH settings API | 读写 `settings.yaml` |
| 自定义模型配置 | `~/.dsh/anime25d-pet/custom-models.jsonc` | JSONC 格式 |
| 静态资源 | HTTP 同源路由 | `/pet-assets/*`、`/pet-local-models/*` |
| 网络访问 | 无 | 不发起外部网络请求(除非用户配置了远程 PSD URL) |
| 摄像头 | 无 | **不访问摄像头** |

---

## 常见问题排查

### 常见错误

| 现象 | 原因 | 解决 |
|------|------|------|
| 紫色 🐾 方块 | 模型加载失败 | 检查模型路径是否正确;检查 `assets/lib/` 是否存在 |
| 空白画面 | WebGL 渲染问题 | 检查浏览器是否支持 WebGL;检查 canvas 尺寸 |
| 参数不生效 | 自动动画覆盖 | 手动设置参数后自动动画会跳过;开启自动动画会释放手动锁定 |
| 重启后参数丢失 | 持久化失败 | 检查 `settings.yaml` 中 `anime25d-pet` 配置是否存在 |
| 点击分区不准确 | 坐标系不匹配 | 确认 `getBounds()` 使用 CSS 坐标系 |

### 日志位置

DSH Host 日志:`/var/log/dsh/dsh-web.log`

### 回滚

```bash

## 配置说明

### settings.yaml 配置项

| 配置项 | 类型 | 默认值 | 说明 |
|--------|------|--------|------|
| `enabled` | boolean | `true` | 插件总开关 |
| `size` | number | `160` | 宠物尺寸(40~400 px) |
| `model` | string | `sample` | 模型 ID(内置 preset 或自定义模型 ID) |
| `animeParams` | object | `{}` | Anime2.5D 参数滑块(34 个参数) |
| `talk` | boolean | `false` | 随机开口说话 |
| `rand` | boolean | `false` | 随机小动作 |
| `flip` | boolean | `false` | 左右镜像翻转桌宠(浮动面板同步管理) |
| `fpsLimit` | number | `30` | 帧率限制(30 / 60 / 0=无限制) |
| `opacity` | number | `1` | 宠物透明度(0~1,含气泡,DSH 设置页可调) |
| `persona` | string | `tsundere` | 人设 ID |
| `developerMode` | boolean | `false` | 开发者模式 |
| `debug` | boolean | `false` | 调试面板 |
| `showTapZones` | boolean | `false` | 显示点击分区 |

### Anime2.5D 参数(34 个)

| 分组 | 参数 | 范围 | 默认 |
|------|------|------|------|
| 头部姿态 | `angleX` / `angleY` / `angleZ` | -1 ~ 1 | 0 |
| 眼睛 | `eyeOpenL` / `eyeOpenR` | 0 ~ 1 | 1 |
| 眼睛 | `eyeX` / `eyeY` | -1 ~ 1 | 0 |
| 眼睛 | `irisScale` | 0.5 ~ 1.3 | 1 |
| 眼睛 | `eyeScaleL` / `eyeScaleR` | 0.5 ~ 1.5 | 1 |
| 眼睛 | `eyeEase` | 0 ~ 1 | 0.3 |
| 眼睛 | `eyeCY` / `eyeCAng` | -1 ~ 1 | 0 |
| 眉毛 | `brow` | -1 ~ 1 | 0 |
| 眉毛 | `browAngSym` / `browAngL` / `browAngR` | -1 ~ 1 | 0 |
| 嘴巴 | `mouthOpen` | 0 ~ 1 | 0 |
| 嘴巴 | `mouthForm` | -1 ~ 1 | 0 |
| 嘴巴 | `mouthCY` / `mouthCAng` | -1 ~ 1 | 0 |
| 嘴巴 | `mouthEase` | 0 ~ 1 | 0.45 |
| 嘴巴 | `mouthScale` | 0.5 ~ 1.5 | 1 |
| 发型 | `fhAmp` | 0 ~ 3 | 2 |
| 发型 | `fhSoft` | 0 ~ 2 | 0.4 |
| 发型 | `bangL` / `bangC` / `bangR` | -1 ~ 1 | 0 |
| 身体物理 | `body` | -1 ~ 1 | 0 |
| 身体物理 | `armY` / `armPos` | -1 ~ 1 | 0 |
| 身体物理 | `bust` | 0 ~ 5 | 2.5 |
| 身体物理 | `bustY` | -1 ~ 3 | 1 |
| 身体物理 | `physAmp` | 0 ~ 3 | 2 |
| 身体物理 | `soft` | 0 ~ 2 | 2 |

### 环境变量

| 变量 | 说明 |
|------|------|
| `DSH_HOME` | DSH 配置目录(默认 `~/.dsh`) |

### 敏感项

无。本插件不存储凭据、不访问用户敏感数据。

---

### settings.yaml 配置项

| 配置项 | 类型 | 默认值 | 说明 |
|--------|------|--------|------|
| `enabled` | boolean | `true` | 插件总开关 |
| `size` | number | `160` | 宠物尺寸(40~400 px) |
| `model` | string | `sample` | 模型 ID(内置 preset 或自定义模型 ID) |
| `animeParams` | object | `{}` | Anime2.5D 参数滑块(34 个参数) |
| `talk` | boolean | `false` | 随机开口说话 |
| `rand` | boolean | `false` | 随机小动作 |
| `flip` | boolean | `false` | 左右镜像翻转桌宠(浮动面板同步管理) |
| `fpsLimit` | number | `30` | 帧率限制(30 / 60 / 0=无限制) |
| `opacity` | number | `1` | 宠物透明度(0~1,含气泡,DSH 设置页可调) |
| `persona` | string | `tsundere` | 人设 ID |
| `developerMode` | boolean | `false` | 开发者模式 |
| `debug` | boolean | `false` | 调试面板 |
| `showTapZones` | boolean | `false` | 显示点击分区 |