dsh-plugin-vrmpet3d 0.0.0-stage → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/LICENSE +43 -0
  2. package/README.md +249 -2
  3. package/assets/models/BlueFatFish.vrm.br +0 -0
  4. package/assets/models/README.md +99 -0
  5. package/assets/models/SampleModel.vrm.br +0 -0
  6. package/assets/models/vrmpet3d-models.json +116 -0
  7. package/assets/motions/README.md +177 -0
  8. package/assets/motions/attention/wave hand 1.vrma.br +0 -0
  9. package/assets/motions/attention/wave hand 2.vrma.br +0 -0
  10. package/assets/motions/attention/wave hand 3.vrma.br +0 -0
  11. package/assets/motions/dance/dance1.vrma.br +0 -0
  12. package/assets/motions/dance/dance2.vrma.br +0 -0
  13. package/assets/motions/fail/fall down1.vrma.br +0 -0
  14. package/assets/motions/fail/fall down2.vrma.br +0 -0
  15. package/assets/motions/idle/hungry1.vrma.br +0 -0
  16. package/assets/motions/idle/hungry2.vrma.br +0 -0
  17. package/assets/motions/idle/idle lookaround1.vrma.br +0 -0
  18. package/assets/motions/idle/idle lookaround2.vrma.br +0 -0
  19. package/assets/motions/idle/idle stretch1.vrma.br +0 -0
  20. package/assets/motions/idle/idle stretch2.vrma.br +0 -0
  21. package/assets/motions/idle/idle stretch3.vrma.br +0 -0
  22. package/assets/motions/idle/idle stretch4.vrma.br +0 -0
  23. package/assets/motions/idle/idle.vrma.br +0 -0
  24. package/assets/motions/idle/idle2.vrma.br +0 -0
  25. package/assets/motions/idle/idle3.vrma.br +0 -0
  26. package/assets/motions/idle/idle4.vrma.br +0 -0
  27. package/assets/motions/idle/touch hair1.vrma.br +0 -0
  28. package/assets/motions/idle/touch hair2.vrma.br +0 -0
  29. package/assets/motions/offline/sleeping.vrma.br +0 -0
  30. package/assets/motions/success/jump 1.vrma.br +0 -0
  31. package/assets/motions/success/jump 2.vrma.br +0 -0
  32. package/assets/motions/success/jump 3.vrma.br +0 -0
  33. package/assets/motions/vrmpet3d-motions.json +283 -0
  34. package/assets/motions/working/dance1.vrma.br +0 -0
  35. package/cordis.patch.yml +7 -0
  36. package/desktop/main.js +1782 -0
  37. package/desktop/package.json +7 -0
  38. package/desktop/preload.js +66 -0
  39. package/desktop/probe-motion-picker.js +122 -0
  40. package/desktop/probe-parts-editor.js +247 -0
  41. package/lib/brotli.js +74 -0
  42. package/lib/client.core.js +7563 -0
  43. package/lib/client.js +5031 -0
  44. package/lib/client.menu.js +501 -0
  45. package/lib/client.scene.js +5128 -0
  46. package/lib/client.vendor.js +55286 -0
  47. package/lib/config-page.html +194 -0
  48. package/lib/config-page.js +4754 -0
  49. package/lib/core.js +7541 -0
  50. package/lib/desktop-page.html +131 -0
  51. package/lib/desktop-page.js +3927 -0
  52. package/lib/desktop.js +536 -0
  53. package/lib/env.js +20 -0
  54. package/lib/global-page.html +338 -0
  55. package/lib/index.js +4170 -0
  56. package/lib/menu.js +479 -0
  57. package/lib/model-picker.js +794 -0
  58. package/lib/pages.css +350 -0
  59. package/lib/picker-page.html +64 -0
  60. package/lib/picker-page.js +145 -0
  61. package/lib/placeholder.js +566 -0
  62. package/lib/scene.js +5106 -0
  63. package/lib/settings.js +259 -0
  64. package/lib/setup-page.html +240 -0
  65. package/lib/setup-page.js +706 -0
  66. package/lib/vrm-info.js +926 -0
  67. package/package.json +55 -4
package/LICENSE ADDED
@@ -0,0 +1,43 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 FatFish pet project contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
22
+
23
+ ---
24
+
25
+ Third-party notice
26
+
27
+ This project's own source is under the MIT License above. It ships one generated
28
+ file, `lib/client.vendor.js`, which bundles other MIT-licensed software:
29
+
30
+ * three.js (c) 2010-2025 three.js authors MIT
31
+ * @pixiv/three-vrm (c) pixiv Inc. MIT
32
+ * @pixiv/three-vrm-animation (c) pixiv Inc. MIT
33
+
34
+ (@moeru/three-mmd and mmd-parser were bundled until 2026-10-12, when this project
35
+ became VRM-only and the MMD stack left both the chunk and `vendor/package.json`.)
36
+
37
+ Their license texts are preserved inline in that file's banner and comments.
38
+
39
+ It also ships ONE 3D model file, `assets/models/SampleModel.vrm`, whose own
40
+ embedded metadata allows redistribution, modification and commercial use with no
41
+ attribution required — see `assets/models/README.md`, and `check-docs.mjs` asserts
42
+ those terms on the committed bytes. Every other model is supplied by the user and
43
+ remains under its own author's terms.
package/README.md CHANGED
@@ -1,3 +1,250 @@
1
- # Temporary Holding Version
1
+ # 桌宠 3D · VRM Pet 3D
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ 为 **DeepSeek Harness(DSH)** 添加一只随任务状态活动的 3D 桌宠。支持应用内显示,以及 DSH Desktop 上独立的透明悬浮窗;任务进行、等待确认、完成或出错时,宠物会显示对应状态并播放配置的动作。
4
+
5
+ 自带两款模型和 VRMA 动作包,安装后即可使用。可导入自己的模型,设置动作、表情、视线和物理效果,也可以让宠物说预设台词或使用 AI 生成碎碎念。
6
+
7
+ [安装与使用](#安装) · [问题反馈](https://github.com/drliuhuan/dsh-plugin-vrmpet3d/issues) · [MIT 许可证](LICENSE)
8
+
9
+ [English](#english)
10
+
11
+ > 当前为早期版本,仍在修复和完善。3D 渲染会占用 GPU 与内存;遇到异常时,请附上 DSH 版本、显示方式和复现步骤反馈。
12
+
13
+ ```
14
+ no runtime dependencies · works offline
15
+ ```
16
+
17
+ ## 效果展示
18
+
19
+ 空闲、工作中、等待确认与任务完成的状态展示合成图:
20
+
21
+ ![桌宠空闲、工作中、等待确认与任务完成](assets/screenshots/states-overview.png)
22
+
23
+ 碎碎念与鼠标凝视的实机演示:
24
+
25
+ ![碎碎念与鼠标凝视演示](assets/screenshots/chatter-gaze.gif)
26
+
27
+ 展示模型为 **BlueFatFish / 蓝色小肥鱼Deepseek**,作者 **木子恶魔**,
28
+ [原始发布页](https://www.aplaybox.com/details/model/ayXkRzVflmnd)。**经作者授权随本插件分发,需注明来源与作者。**
29
+ 模型版权归原作者,其授权独立于插件代码的 MIT 许可证。模型选择页及首次引导的模型步骤也展示相同署名、授权与来源。
30
+
31
+ 市场截图顺序由根目录 [screenshots.json](screenshots.json) 声明,包含合成展示图和四张原始截图。
32
+
33
+ ## 功能
34
+
35
+ | 功能 | 说明 |
36
+ | --- | --- |
37
+ | 两种显示方式 | 应用内宠物;Desktop 端自动开启独立悬浮窗,支持置顶和透明区域鼠标穿透 |
38
+ | 任务状态联动 | 空闲、工作中、等待确认、完成、出错与离线;空闲保持 idle,不自动进入休眠 |
39
+ | 模型 | VRM 1.0 / 0.x,兼容普通 glTF/GLB;人体动作播放需要 VRM 骨架 |
40
+ | 动作 | 自带 VRMA 动作包,可按状态配置循环、单次、速度、表情、口型和凝视 |
41
+ | 跳支舞 | 右键随机播放一支舞蹈;播完、双击或开始工作时结束 |
42
+ | 互动 | 点击与长按部位触发表情和碎碎念;拖动、缩放、旋转视角、视线跟随和弹簧骨物理 |
43
+ | 碎碎念 | 内置台词、自定义台词,或使用 DSH 模型 / OpenAI 兼容接口生成 AI 台词 |
44
+ | 导入 | 模型以文件导入、动作包以文件夹导入,复制到插件存储后不依赖原路径 |
45
+
46
+ ## 运行要求
47
+
48
+ - 已在 DeepSeek Harness **0.2.0-rc.2** 上验证;其他版本尚未验证,不代表无法使用。本项目是 DSH 插件,不能作为独立应用运行。
49
+ - 支持 WebGL2 的图形环境。独立悬浮窗需可用的 Electron 运行时,由启动器从 DSH 安装目录复用;无法启动时回退到应用内显示。
50
+ - 无需安装运行时 npm 依赖。默认台词和模型动画可离线使用;AI 碎碎念取决于所选服务的网络与额度。
51
+
52
+ ## 安装
53
+
54
+ 请使用本仓库的 **main 分支**安装。项目尚未发布到 npm。
55
+
56
+ 1. 在 DSH 插件管理器中添加本仓库;支持 GitHub 包来源时,使用:
57
+
58
+ ```text
59
+ github:drliuhuan/dsh-plugin-vrmpet3d#main
60
+ ```
61
+
62
+ 2. 也可以[下载 main 分支 ZIP](https://github.com/drliuhuan/dsh-plugin-vrmpet3d/archive/refs/heads/main.zip),解压后在插件管理器中添加包含 `package.json` 的文件夹,或填写 `link:<插件文件夹的绝对路径>`。
63
+ 3. 确认插件已启用,然后重启 DSH。更新插件后也请重启,确保宿主代码和页面代码使用同一版本。
64
+
65
+ 请先停用其他占用同一桌宠显示位置的插件,例如 `dsh-plugin-fatfish-pet`、`dsh-plugin-whale-pet`。卸载时从插件管理器移除本插件。
66
+
67
+ ## 首次使用
68
+
69
+ 首次引导会依次配置偏好模型、桌宠界面和 AI 碎碎念。可稍后配置,也可在 **通用设置 → 其他 → 重新运行引导** 再次打开。
70
+
71
+ - **切换显示方式**:Desktop 的通用设置最上方可选“内置宠物”或“自动”;自动优先使用独立悬浮窗。右键菜单也可以切换。
72
+ - **切换模型**:右键 → 切换模型,点击缩略图;可拖入自己的模型文件,加载进度结束后再继续切换。
73
+ - **设置动作**:通用设置 → 状态与动作。默认映射、表情和播放方式已随动作包提供,可以自行修改。
74
+ - **设置台词**:通用设置 → 碎碎念。选择内置、自定义或 AI 来源;AI 模式需要先选择可用服务和模型。
75
+ - **设置表情与部位**:右键 → 当前模型参数设置。模型结构不同,可用表情、部位和弹簧骨链也会不同。
76
+
77
+ ### 鼠标操作
78
+
79
+ | 操作 | 效果 |
80
+ | --- | --- |
81
+ | 点击 / 原地长按 | 触发部位互动与碎碎念,保留正在播放的动作 |
82
+ | 左键拖动 | 移动宠物;开启对应界面的重力后,松开可触发抛掷和落地 |
83
+ | 滚轮经过宠物 | 调整宠物及其文字大小 |
84
+ | 滚轮经过文字 | 单独调整文字大小 |
85
+ | 右键拖动 | 旋转观察视角 |
86
+ | 右键点击 | 打开菜单:显示切换、模型切换、跳舞、重载、设置、重力和隐藏等 |
87
+ | 双击 | 结束当前跳舞 |
88
+
89
+ ## 模型、动作与数据
90
+
91
+ 自带默认模型 **蓝色小肥鱼Deepseek(木子恶魔)**,以及备用模型 **ヴィータ(VRoid プロジェクト)**。来源和授权见下方许可证说明及[模型说明](assets/models/README.md)。
92
+
93
+ ### BlueFatFish 模型署名与授权
94
+
95
+ | 项目 | 信息 |
96
+ | --- | --- |
97
+ | 模型文件 | `BlueFatFish.vrm.br`(加载时解压为 VRM) |
98
+ | 模型名称 | 蓝色小肥鱼Deepseek |
99
+ | 作者 | 木子恶魔 |
100
+ | 来源 | [Aplaybox 原始发布页](https://www.aplaybox.com/details/model/ayXkRzVflmnd) |
101
+ | 分发授权 | 经作者授权随本插件分发,需注明来源与作者 |
102
+
103
+ 本项目的 MIT 许可证不替代模型作者的授权;其他用途仍以作者原始发布页的条款和另行授权为准。
104
+
105
+ 模型支持 `.vrm`、`.glb`、`.gltf`,动作支持 `.vrma`;不支持 PMX/PMD 或 VMD。普通 glTF/GLB 没有 VRM 人体骨架时,不能播放 VRMA 人体动作。自带模型与动作使用 Brotli 压缩存储,加载时自动解压。
106
+
107
+ 导入内容与配置保存在 DSH profile 的插件存储目录中。移除导入只删除插件持有的副本,不删除原文件。随包动作的默认设置按文件名解析,不依赖其他机器上的模型或动作 ID。
108
+
109
+ ### AI 与隐私
110
+
111
+ 宠物通过任务状态、会话标识和计时信息判断当前状态,不需要读取会话正文、工具参数或附件。启用 AI 碎碎念后,所配置的人格、状态提示词和部位信息会发送给你选择的 AI 服务;费用与数据处理规则由该服务决定。
112
+
113
+ ### 常见问题与反馈
114
+
115
+ - **没有宠物**:检查插件管理器里是否仍已启用,重启 DSH,并确认未被其他桌宠插件占用显示位置。
116
+ - **没有独立窗口**:在通用设置中选择“自动”;若运行时不可用,仍可使用内置宠物。
117
+ - **模型不播放动作**:确认使用 VRM 模型,状态下选有动作,并开启模型动作。反馈时请附上完整错误提示。
118
+ - **AI 不说话**:检查台词来源、服务、模型和访问额度;可以先切回内置台词确认气泡显示正常。
119
+
120
+ 请通过 [GitHub Issues](https://github.com/drliuhuan/dsh-plugin-vrmpet3d/issues) 提交问题,附上 DSH 版本、操作系统、内置/外置显示方式、复现顺序与预期结果。请勿上传 API Key 或私人会话内容。
121
+
122
+ ## English
123
+
124
+ Add a 3D desktop pet to **DeepSeek Harness (DSH)**. The pet follows task states and can appear inside the app or in a separate transparent floating window on DSH Desktop. It shows the current state and plays its assigned motion while a task is running, waiting for confirmation, completed, or has failed.
125
+
126
+ Two models and a VRMA motion pack are included. You can import your own models, configure motions, expressions, gaze and physics, and let the pet speak preset lines or generate AI chatter.
127
+
128
+ [Installation and usage](#installation) · [Report an issue](https://github.com/drliuhuan/dsh-plugin-vrmpet3d/issues) · [MIT license](LICENSE)
129
+
130
+ > This is an early release and is still being improved. 3D rendering uses GPU and memory. When reporting a problem, include your DSH version, display mode and reproduction steps.
131
+
132
+ ### Screenshots and demo
133
+
134
+ The composite shows the idle, working, waiting for confirmation and task completed states:
135
+
136
+ ![Pet in idle, working, waiting and completed states](assets/screenshots/states-overview.png)
137
+
138
+ Live demo of chatter and mouse gaze:
139
+
140
+ ![Chatter and mouse gaze demo](assets/screenshots/chatter-gaze.gif)
141
+
142
+ The model shown is **BlueFatFish / 蓝色小肥鱼Deepseek**, by **木子恶魔**. See the [original release](https://www.aplaybox.com/details/model/ayXkRzVflmnd). **The author authorized distribution with this plugin, provided the source and author are credited.** The model remains the author's work and is covered separately from the plugin's MIT license. The same attribution, authorization and source are shown in the model picker and the first-run guide.
143
+
144
+ The marketplace screenshot order is declared in the root [screenshots.json](screenshots.json), which lists the composite and four original screenshots.
145
+
146
+ ### Features
147
+
148
+ | Feature | Description |
149
+ | --- | --- |
150
+ | Two display modes | In-app pet, or an automatically opened floating window on Desktop with always-on-top and transparent-area click-through support |
151
+ | Task state tracking | Idle, working, waiting for confirmation, completed, failed and offline; idle stays in the idle state and does not automatically sleep |
152
+ | Models | VRM 1.0 / 0.x and regular glTF/GLB; humanoid VRM bones are required for character motions |
153
+ | Motions | Included VRMA pack with per-state loop, one-shot, speed, expression, lip-sync and gaze settings |
154
+ | Dance | Right-click to play a random dance; it ends when the motion finishes, on double-click, or when work starts |
155
+ | Interaction | Click or hold body parts for expressions and chatter; drag, resize, rotate the view, follow the pointer and use spring-bone physics |
156
+ | Chatter | Built-in or custom lines, or AI-generated lines using a DSH model or an OpenAI-compatible service |
157
+ | Import | Import models as files and motion packs as folders. Imported files are copied into plugin storage and no longer depend on their original paths |
158
+
159
+ ### Requirements
160
+
161
+ - Verified with DeepSeek Harness **0.2.0-rc.2**. Other versions have not been verified; this does not mean they cannot work. This is a DSH plugin and cannot run as a standalone application.
162
+ - A graphics environment with WebGL2. The floating window requires an available Electron runtime, which the launcher reuses from the DSH installation. If it cannot start, the pet falls back to the in-app display.
163
+ - No runtime npm dependencies are required. Built-in lines and model motions work offline. AI chatter depends on the selected service's network access and usage quota.
164
+
165
+ ### Installation
166
+
167
+ Install from this repository's **`main` branch**. The project is not published on npm yet.
168
+
169
+ 1. Add this repository in the DSH plugin manager. If it accepts GitHub package sources, use:
170
+
171
+ ```text
172
+ github:drliuhuan/dsh-plugin-vrmpet3d#main
173
+ ```
174
+
175
+ 2. You can also [download the `main` branch ZIP](https://github.com/drliuhuan/dsh-plugin-vrmpet3d/archive/refs/heads/main.zip), extract it and add the folder containing `package.json` in the plugin manager, or enter `link:<absolute path to the plugin folder>`.
176
+ 3. Make sure the plugin is enabled, then restart DSH. Restart after updates as well so the host and page code use the same version.
177
+
178
+ Disable other plugins that use the same pet display position first, such as `dsh-plugin-fatfish-pet` and `dsh-plugin-whale-pet`. Uninstall this plugin through the plugin manager.
179
+
180
+ ### First run
181
+
182
+ The first-run guide configures your preferred model, pet display and AI chatter. You can finish setup later, or reopen it from **General Settings → Other → Run setup guide again**.
183
+
184
+ - **Choose a display mode:** On Desktop, select “Built-in pet” or “Automatic” at the top of General Settings. Automatic mode prefers the separate floating window. You can also switch modes from the right-click menu.
185
+ - **Choose a model:** Right-click → Switch model, then select a thumbnail. You can also drop in a model file; wait for loading to finish before switching again.
186
+ - **Configure motions:** General Settings → States and motions. Default state mappings, expressions and playback settings are included and can be changed.
187
+ - **Configure lines:** General Settings → Chatter. Choose built-in, custom or AI lines. AI mode requires an available service and model.
188
+ - **Configure expressions and body parts:** Right-click → Current model settings. Available expressions, body parts and spring-bone chains depend on the model.
189
+
190
+ #### Mouse controls
191
+
192
+ | Action | Result |
193
+ | --- | --- |
194
+ | Click / hold in place | Trigger body-part interaction and chatter while preserving the current motion |
195
+ | Drag with left button | Move the pet; when gravity is enabled for that display, release to throw it and let it land |
196
+ | Scroll over the pet | Resize the pet and its text |
197
+ | Scroll over text | Resize the text only |
198
+ | Drag with right button | Rotate the view |
199
+ | Right-click | Open the menu for display and model switching, dancing, reloading, settings, gravity, hiding and more |
200
+ | Double-click | End the current dance |
201
+
202
+ ### Models, motions and data
203
+
204
+ The bundled default model is **蓝色小肥鱼Deepseek by 木子恶魔**. The alternate model is **ヴィータ by VRoid プロジェクト**. See the license notes below and the [model documentation](assets/models/README.md) for their sources and terms.
205
+
206
+ #### BlueFatFish model attribution and authorization
207
+
208
+ | Item | Information |
209
+ | --- | --- |
210
+ | Model file | `BlueFatFish.vrm.br` (decompressed to VRM when loaded) |
211
+ | Model name | 蓝色小肥鱼Deepseek |
212
+ | Author | 木子恶魔 |
213
+ | Source | [Original Aplaybox release](https://www.aplaybox.com/details/model/ayXkRzVflmnd) |
214
+ | Distribution authorization | The author authorized distribution with this plugin, provided the source and author are credited |
215
+
216
+ The project's MIT license does not replace the model author's authorization. Other uses remain subject to the terms on the original release page and any separate authorization from the author.
217
+
218
+ Models support `.vrm`, `.glb` and `.gltf`; motions support `.vrma`. PMX/PMD and VMD are not supported. Regular glTF/GLB files without a VRM humanoid skeleton cannot play VRMA character motions. Bundled models and motions are stored with Brotli compression and decompressed automatically when loaded.
219
+
220
+ Imported files and settings are stored in the plugin storage directory in the DSH profile. Removing an import deletes only the plugin's copy, not the original file. Default settings for bundled motions are resolved by filename and do not depend on model or motion IDs from another machine.
221
+
222
+ #### AI and privacy
223
+
224
+ The pet uses task state, session identifiers and timing information to determine its current state. It does not need to read conversation text, tool arguments or attachments. When AI chatter is enabled, the configured personality, state prompt and body-part information are sent to the AI service you select. That service determines its own fees and data handling rules.
225
+
226
+ #### Troubleshooting and feedback
227
+
228
+ - **The pet is missing:** Check that the plugin is enabled, restart DSH, and make sure another pet plugin is not using the same display position.
229
+ - **The floating window is missing:** Select “Automatic” in General Settings. The in-app pet remains available if the runtime cannot start.
230
+ - **The model does not move:** Confirm that you are using a VRM model, that a motion is assigned to the current state, and that model motions are enabled. Include the full error message when reporting the issue.
231
+ - **AI is silent:** Check the line source, service, model and usage quota. Switch to built-in lines to confirm that the speech bubble works.
232
+
233
+ Report issues through [GitHub Issues](https://github.com/drliuhuan/dsh-plugin-vrmpet3d/issues). Include your DSH version, operating system, display mode, reproduction steps and expected result. Do not upload API keys or private conversation content.
234
+
235
+
236
+ ## License
237
+
238
+ 插件代码与本项目原创动作采用 MIT 许可证。模型资源仍遵守各自作者的授权,不因随本仓库分发而自动改为 MIT。
239
+
240
+ MIT — see [LICENSE](LICENSE). It bundles other MIT-licensed software as one generated file
241
+ ([lib/client.vendor.js](lib/client.vendor.js)): three.js, `@pixiv/three-vrm` and `@pixiv/three-vrm-animation`. It
242
+ ships exactly two 3D model files, and both may be redistributed with it:
243
+
244
+ | file | model | author | source | terms |
245
+ | --- | --- | --- | --- | --- |
246
+ | [assets/models/BlueFatFish.vrm.br](assets/models/BlueFatFish.vrm.br) | 蓝色小肥鱼Deepseek | 木子恶魔 | <https://www.aplaybox.com/details/model/ayXkRzVflmnd> | 经作者授权分发 — credited here as the author asks |
247
+ | [assets/models/SampleModel.vrm.br](assets/models/SampleModel.vrm.br) | ヴィータ | VRoid プロジェクト | <https://vroid.com/en/studio> | its own embedded licence: redistribution, modification and commercial use allowed, no attribution required |
248
+
249
+ The first is what a fresh profile resolves to; the second is the fallback. Every other model is the user's and stays
250
+ under its own author's terms.
Binary file
@@ -0,0 +1,99 @@
1
+ # assets/models/
2
+
3
+ Drop your own `.vrm`, `.glb` or `.gltf` files here (or point the
4
+ plugin at a folder elsewhere with the `modelDirs` config). This build is **VRM and plain glTF/GLB only**
5
+ (2026-10-12): a `.pmx`/`.pmd` is recognised by its magic bytes and refused by name, and a `.vmd` motion
6
+ likewise, so neither belongs here.
7
+
8
+ ## What ships here: two models, and both may be redistributed with the plugin
9
+
10
+ `BlueFatFish.vrm` is the model a fresh profile resolves to; `SampleModel.vrm` is the fallback. Each ships for a
11
+ reason named here, and each is credited below with its **source and author** — the operator asked for that on
12
+ 2026-10-13 (「需要注明来源和作者」). The picker prints the same two credits under its grid, on 切换模型 and on the guide's
13
+ ② 偏好模型 step, because both mount one component and the credit comes from the host
14
+ (`BUNDLED_MODEL_CREDITS` in `lib/index.js`).
15
+
16
+ ### `BlueFatFish.vrm` — 蓝色小肥鱼Deepseek, by 木子恶魔
17
+
18
+ | | |
19
+ | --- | --- |
20
+ | model | 蓝色小肥鱼Deepseek |
21
+ | author | 木子恶魔 |
22
+ | source | <https://www.aplaybox.com/details/model/ayXkRzVflmnd> |
23
+ | terms | 经作者授权分发,需注明来源与作者 — it ships inside this plugin with the author's permission, and this credit travels with it |
24
+ | file | VRM 1.0 (`VRMC_vrm`), 18 480 432 bytes, 152 nodes, 6 meshes, 53 humanoid bones, 18 preset expressions plus one custom (`TiePen`), 22 spring chains |
25
+
26
+ It became the plugin's default model on 2026-10-13 (「把BlueFatFish作为默认模型」). The permission covers distribution as
27
+ part of this plugin and nothing else: a copy taken from this repository is still the author's work, under the
28
+ author's terms, credited above.
29
+
30
+ **授权说明:** BlueFatFish / 蓝色小肥鱼Deepseek 的作者为 **木子恶魔**,来源为上方 Aplaybox 原始发布页。
31
+ 本项目获得的是随本插件分发模型的授权,并保留来源与作者署名;模型不因收录于本仓库而改用 MIT 许可证。
32
+ 其他用途以模型作者的原始条款和另行授权为准。README 展示区、模型选择页和首次引导的模型步骤均保留这些信息。
33
+
34
+ ### `SampleModel.vrm` — ヴィータ, by VRoid プロジェクト
35
+
36
+ **Committed on purpose** since 2026-10-10, and the reason it can be shipped is the file's own embedded licence — not
37
+ a judgement call made here. Its `extensions.VRM.meta.otherLicenseUrl` is a VRoid Hub licence query string that
38
+ reads:
39
+
40
+ | term | value |
41
+ | --- | --- |
42
+ | `redistribution` | `allow` |
43
+ | `modification` | `allow` |
44
+ | `personal_commercial_use` | `profit` |
45
+ | `corporate_commercial_use` | `allow` |
46
+ | `credit` | `unnecessary` |
47
+ | `allowed_to_use_user` | `everyone` |
48
+ | `characterization_allowed_user` | `everyone` |
49
+ | `sexual_expression` / `violent_expression` | `allow` |
50
+
51
+ So it may be redistributed, modified, used commercially by individuals and
52
+ corporations, and **needs no attribution**. It also has what a bundled model needs
53
+ in order to exercise this plugin: a standard VRM humanoid rig, 15 expressions, and 18
54
+ spring chains (hair and skirt), which is why the settings window has something real
55
+ to show on a fresh install.
56
+
57
+ Source: <https://vroid.com/en/studio> sample models / VRoid Hub. Author
58
+ `VRoidプロジェクト`, title `ヴィータ`, 14 159 872 bytes.
59
+
60
+ ## Every OTHER file here
61
+
62
+ The rule below is unchanged for anything you add, and it is why the assertion in
63
+ `scripts/check-docs.mjs` now names the one bundled file instead of requiring the
64
+ folder to be empty:
65
+
66
+ * **No other model file may be committed here.** Most VRM models on the
67
+ internet forbid redistribution, and many forbid commercial use; committing one
68
+ would make this repository undistributable.
69
+ * Read [`../../docs/ASSET-CONTRACT.md`](../../docs/ASSET-CONTRACT.md) before adding
70
+ anything: check the model's **embedded** metadata (`extensions.VRMC_vrm.meta`) as
71
+ well as the author's published rules, and when the two disagree take the
72
+ conservative reading.
73
+ * Do **not** commit a model whose licence you have not read, and do not commit
74
+ frames rendered from one.
75
+
76
+ ## Prefer a folder outside the repo
77
+
78
+ For your own models, `modelDirs` in the plugin config is the better route: it keeps
79
+ licensed third-party assets out of version control entirely, and it lets you keep
80
+ several collections in their own folders.
81
+
82
+ ```yaml
83
+ - id: vrmpet3d
84
+ name: dsh-plugin-vrmpet3d
85
+ config:
86
+ modelDirs:
87
+ - D:/models/vrm
88
+ - F:/models/mine
89
+ ```
90
+
91
+ ## How the default is chosen
92
+
93
+ `preferences.modelId` ships EMPTY, which means "resolve one". `core.resolveModelId`
94
+ picks the catalogued model named `BlueFatFish.vrm` first — the bundled one, or yours
95
+ if you have a file by that name — then `SampleModel.vrm`, then the first VRM, then the first model of any
96
+ kind (and the kinds it catalogues are `.vrm`, `.glb` and `.gltf`; a `.pmx`/`.pmd` is left out of the
97
+ catalogue entirely since 2026-10-12). With nothing catalogued at all the pet shows nothing and says so; it
98
+ does not fall back to a stand-in avatar (that was removed on 2026-10-10), and `lib/placeholder.js` survives
99
+ only as the fixture the geometry probes and the browser suite build an avatar with.
Binary file
@@ -0,0 +1,116 @@
1
+ {
2
+ "springs": {
3
+ "BlueFatFish.vrm.br": {
4
+ "DaiMao": {
5
+ "stiffness": 0.4,
6
+ "dragForce": 0.2,
7
+ "gravityPower": 0.05
8
+ },
9
+ "LiuHai": {
10
+ "stiffness": 0.05,
11
+ "dragForce": 0.2,
12
+ "gravityPower": 0.5
13
+ },
14
+ "LiuHai.R": {
15
+ "stiffness": 0.05,
16
+ "dragForce": 0.2,
17
+ "gravityPower": 0.5
18
+ },
19
+ "LiuHai.L": {
20
+ "stiffness": 0.05,
21
+ "dragForce": 0.2,
22
+ "gravityPower": 0.5
23
+ },
24
+ "FaBing.L": {
25
+ "stiffness": 0.05,
26
+ "dragForce": 0.2,
27
+ "gravityPower": 0.5
28
+ },
29
+ "FaBing.R": {
30
+ "stiffness": 0.05,
31
+ "dragForce": 0.2,
32
+ "gravityPower": 0.5
33
+ },
34
+ "ErDuo.L": {
35
+ "stiffness": 1,
36
+ "dragForce": 0.2,
37
+ "gravityPower": 0.05
38
+ },
39
+ "ErDuo.R": {
40
+ "stiffness": 1,
41
+ "dragForce": 0.2,
42
+ "gravityPower": 0.05
43
+ },
44
+ "Hou_hair": {
45
+ "stiffness": 0.05,
46
+ "dragForce": 0.2,
47
+ "gravityPower": 0.5
48
+ },
49
+ "Hou_hair.L": {
50
+ "stiffness": 0.05,
51
+ "dragForce": 0.2,
52
+ "gravityPower": 0.5
53
+ },
54
+ "Hou_hair.R": {
55
+ "stiffness": 0.05,
56
+ "dragForce": 0.2,
57
+ "gravityPower": 0.5
58
+ },
59
+ "Z_QunZi": {
60
+ "stiffness": 1,
61
+ "dragForce": 0.2,
62
+ "gravityPower": 0.5
63
+ },
64
+ "Q_QunZi.L": {
65
+ "stiffness": 1,
66
+ "dragForce": 0.2,
67
+ "gravityPower": 0.5
68
+ },
69
+ "QunZi.L": {
70
+ "stiffness": 1.5,
71
+ "dragForce": 0.2,
72
+ "gravityPower": 0.5
73
+ },
74
+ "H_QunZi.L": {
75
+ "stiffness": 1.5,
76
+ "dragForce": 0.2,
77
+ "gravityPower": 0.5
78
+ },
79
+ "Z_HouQunZi": {
80
+ "stiffness": 1.5,
81
+ "dragForce": 0.2,
82
+ "gravityPower": 0.5
83
+ },
84
+ "H_QunZi.R": {
85
+ "stiffness": 1.5,
86
+ "dragForce": 0.2,
87
+ "gravityPower": 0.5
88
+ },
89
+ "QunZi.R": {
90
+ "stiffness": 1.5,
91
+ "dragForce": 0.2,
92
+ "gravityPower": 0.5
93
+ },
94
+ "Q_QunZi.R": {
95
+ "stiffness": 1,
96
+ "dragForce": 0.2,
97
+ "gravityPower": 0.5
98
+ },
99
+ "WeiBa": {
100
+ "stiffness": 0.5,
101
+ "dragForce": 0.5,
102
+ "gravityPower": 0.0484
103
+ },
104
+ "WeiBa.L": {
105
+ "stiffness": 0.5,
106
+ "dragForce": 0.5,
107
+ "gravityPower": 0.05
108
+ },
109
+ "WeiBa.R": {
110
+ "stiffness": 0.5,
111
+ "dragForce": 0.5,
112
+ "gravityPower": 0.05
113
+ }
114
+ }
115
+ }
116
+ }