feat(models): 新增历史模型回填(reanalyze)并修复存储去重的悬挂文件问题
背景:升级到带 models.stats 的版本后,库里已有模型没有分析与缩略图,
审核界面会全部显示"未分析、无预览图"。E2E 验证时还发现一个真问题:
sha256 去重命中旧资产但文件不存在(换过 STORAGE_DIR、或只恢复数据库)时,
分析会静默产出"全 0 结果"。
- POST /api/models/:id/reanalyze:重新分析(面数/骨骼树/humanoid/可驱动性)
并重建缩略图,只改 stats 与 thumbnailAssetId;文件在存储中不存在时返回 409,
避免用空结果覆盖已有分析数据
- scripts/reanalyze-models.mjs:批量回填 CLI(--dry-run / --model-id / --force)
- StorageService.persistBuffer:去重命中但文件不存在时按原路径**自愈补写**
- 契约:rest-api 新增 /api/models/{id}/reanalyze(路由 29 → 30 条)
- 文档:README / tasks/005 / 发布说明补回填章节与升级步骤
实测:真实 21MB VRM(290 骨骼)回填出面数 53552 / 顶点 44662 / humanoid 7/22,
并重建 512×512 缩略图;文件缺失场景返回 409 且不覆盖既有数据。
测试 168 项通过;契约与 30 条路由一致。
This commit is contained in:
@@ -186,3 +186,20 @@ npm run test:smoke # 冒烟 [4] 段落
|
||||
`test/model-inspector.spec.ts`(**25 项**)覆盖 GLB 统计与骨骼树、VRM 识别、必需 16 根
|
||||
humanoid 骨、非 glTF 容器降级、截断与健壮性、与客户端映射表逐字一致。
|
||||
`test/model-thumbnail.spec.ts`(**8 项**)覆盖缩略图 PNG 结构、蒙皮与降级路径。
|
||||
|
||||
## 追加:历史模型回填(`POST /api/models/:id/reanalyze`)
|
||||
|
||||
升级到带 `models.stats` 的版本后,已有模型还没有分析与缩略图。重新分析接口只改
|
||||
`stats` 与 `thumbnailAssetId` 两个字段,用于回填 / 文件替换后刷新 / 缩略图渲染器升级后重出图。
|
||||
|
||||
```bash
|
||||
cd /opt/opendance/web-server
|
||||
node scripts/reanalyze-models.mjs --url http://127.0.0.1:3000 # 回填全部缺 stats 的
|
||||
node scripts/reanalyze-models.mjs --url http://127.0.0.1:3000 --dry-run # 只列清单
|
||||
```
|
||||
|
||||
实测(真实 21MB VRM,290 骨骼):回填出面数 53552 / 顶点 44662 / 骨骼 290 /
|
||||
humanoid 7/22,并重建 512×512 缩略图。
|
||||
文件在存储中丢失时返回 **409** 并说明原因,不会用全 0 结果覆盖既有分析数据。
|
||||
另外 `StorageService.persistBuffer` 在 sha256 去重命中但文件不存在时会**自愈补写**,
|
||||
避免换过 `STORAGE_DIR` 或只恢复数据库后出现"静默全 0 分析"。
|
||||
|
||||
Reference in New Issue
Block a user