-
released this
2026-09-18 03:03:50 +08:00 | 1 commits to main since this releaseOpenDance Studio Web 服务端 v0.7.5
两个真实缺陷修复(都由跨端边界验收暴露)+ 跨端边界验收新增两类场景。
契约快照不变:
rest-api 0.5.0/websocket-keypoints 0.2.0/data-models 0.7.0/
skeleton-topology 0.2.0/model-formats 0.5.0/database 0.4.0
(与 opendance-windows / opendance-android 逐字节一致)。一、上传落盘:去重命中时删掉了唯一副本
persistTempFile(动作 / 模型 / 场景上传走的通路)在 sha256 去重命中时
直接删掉刚上传的临时文件并返回旧记录。若旧记录指向的路径已不存在
(换过STORAGE_DIR、只恢复了数据库、手工删过文件),上传仍返回 201,
但后续全部失败:ERROR [PreprocessService] 动作 #7 预处理失败:ENOENT ... /storage/motion/2026/09/a8/<sha>.vmd实测就是在本机的验收环境上撞到的(换过存储目录后动作预处理直接 500)。
persistBuffer(内存通路:关键点序列 / 缩略图 / 转换产物)早已有「文件缺失则按
原路径补写」的兜底,这条通路漏了。修复:去重命中时先确认文件存在;缺失则按记录里的原路径
rename
(跨设备退化为copyFile)补写,只有确认目标存在才删临时文件。新增
test/storage-persist.spec.ts(5 项)。反向验证:临时还原修复后,
「去重命中但文件已丢失」这条立刻失败;恢复后 5 项全过。二、不可用模型的原因归因不准确
unusableReason()原来只要stats里有 humanoid 数字就归因于 humanoid,于是
一个直接上传的.glb(骨架完全合规、drivable = true、只是没有 VRM 容器)
会被写成「humanoid 不达标(19/22)」—— 审核界面据此会把修复方向引到
「重新绑定骨骼」,而实际要做的是「以 VRM 交付」。用真实素材实测(PMX → Assimp → GLB,886 KB):
原因文案 修复前 humanoid 不达标(19/22),未产出 VRM修复后 未产出 VRM(格式为 GLB;humanoid 覆盖 19/22 已达标),需重新以 VRM 交付才能进入客户端目录现在按
drivable区分:不满足 16 根必需骨才归因 humanoid;达标但没有 VRM 容器
则明确说明"已达标"。新增 2 项单测(model-usability5 → 7 项)。三、跨端边界验收(Windows 客户端 × 本服务端)
accept-integration.sh新增两类场景,两端都断言:- 不可用模型:真实 PMX 用 Assimp 转 GLB 后入库(等价"管线只产出 GLB")→
usable=false、原因准确、不进入catalog/export、defaultModelId不受影响;
包内客户端的bundle.models里没有任何非 VRM 模型; - 场景
config只给最少字段({physics:{gravity:{y:-9.8}}})→ 服务端补齐默认
(碰撞体auto、地面0.6 / 45°、静风、相机follow、环境光1、出生点 1 条),
客户端解析后逐项一致。
四、发布前自检(本版实测)
$ npm run verify ✓ 契约 6 项 / 35 条路由 / 版本一致(0.7.5) ✓ 27 个文件 309 项测试(原 26 / 304) ✓ 产物级实体注册核对(dist/entities 6 项含 Scene)/启动冒烟 $ bash web-server/scripts/accept-release.sh <tar.gz> # 对发布包本身的验收 ✓ /health v0.7.5 / scenes.available=true / 包内 smoke 全过 $ 跨端集成验收(Windows v0.2.5 包内客户端 × 本服务端) ✓ 目录四类资源 / 场景物理参数逐项 / 关键点 2901 帧 / 不可用模型不进目录 / 最简配置补默认包内全部 356 个文件已逐字节核对:179 个源码/文档与 tag
v0.7.5一致,
177 个构建产物与工作树构建一致(0 处不一致 / 0 处多余 / 0 处缺失)。五、部署提示
- 本次不涉及表结构变更(迁移仍为 6 个),可直接替换程序文件后重启;
- 如果你换过
STORAGE_DIR或只恢复过数据库:v0.7.5 起,命中去重时会自动按记录中的
路径把文件补写回去;此前的版本会出现「上传成功但预处理/下载 500」。
Downloads
- 不可用模型:真实 PMX 用 Assimp 转 GLB 后入库(等价"管线只产出 GLB")→