Files
opendance 39bfd390e3 feat(models): 模型一律转 VRM(契约 0.5.0)+ 可用性门槛 + 管理端版本号展示
按《DSH 开发文档 v1.6》4.9 与第十一章实现,Web 端第一步:

1. 契约先行(先改 contracts/ 再同步三端):
   * model-formats.md -> 0.5.0:模型主力格式改为 VRM,所有上传模型一律转 VRM
     (.pmx/.fbx: assimp -> GLB -> VRM;glb/gltf: 包装为 VRM);
     新增 humanoid 硬门槛与"不达标回退 GLB + usable=false"的交付表;
   * data-models.md -> 0.5.0:Model 新增 usable / unusableReason,明确
     usable=false 不进入 catalog/export;format 说明改为主力 vrm;
   * VERSION 与 contract-versions.ts 同步(三端契约文件逐字节一致)。
2. 实现:
   * MODEL_CONVERT_FORMAT 默认改为 vrm(deploy/.env.example 同步);
   * 新增 isUsableModel()/unusableReason():usable 等价于"已产出 VRM",
     原因从 stats 里带出 humanoid 覆盖度;
   * catalog/export 与 catalog/version 指纹都只统计 format=vrm 的已发布模型,
     resolveDefaultModelId 同样只在可用模型中选;
   * 管理端:模型列表与审核面板显示「不可用」及原因;
   * 管理端左下角展示当前版本号(构建期从 web-server/package.json 注入
     __APP_VERSION__,与 GET /health 同源),并去掉写死的"契约 rest-api 0.1.0"。
3. 测试:新增 test/model-usability.spec.ts 5 项;规模 16 文件 / 225 项。
4. 版本 0.3.0。
2026-09-17 00:05:02 +08:00

71 lines
3.5 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ============================================================
# OpenDance Studio Web 服务端 -- Linux 原生部署环境变量
#
# 复制为 deploy/.env 后填写;.env 已被 .gitignore 忽略,禁止提交。
# 该文件由 systemd 通过 EnvironmentFile 注入 Node 进程。
# ============================================================
# ---- 服务 ----
NODE_ENV=production
# 软件 API 端口:Windows/Godot 客户端与 Android App 调用它
# (提供 /api、/health、/static、/contracts,**不提供管理页面**)
PORT=3000
# 管理端端口:浏览器访问管理界面(页面 + 上面全部接口)
# 不设置时默认 = PORT + 1(即 3001);设为与 PORT 相同即为单端口兼容模式
ADMIN_PORT=3001
# 监听地址:
# 反代与后端同机 -> 127.0.0.1(后端不直接对外暴露,推荐)
# 反代在别的机器 -> 0.0.0.0,并用防火墙把该端口限制为仅反代来源可访问
HOST=0.0.0.0
# 管理端单独绑定地址(可选)。只想让管理端暴露在内网时,例如 127.0.0.1 或内网网卡地址
# ADMIN_HOST=127.0.0.1
# 管理端静态站点目录(本服务自带管理端页面,反代只需整体转发到管理端端口)
ADMIN_DIR=/opt/opendance/admin
# ---- 现有 MySQL / MariaDB 实例(本项目不安装、不管理数据库)----
DB_HOST='<existing-mysql-host>'
DB_PORT=3306
DB_USER=opendance_app
DB_PASS='<数据库口令>'
DB_NAME=opendance
# 生产环境必须为 false,表结构一律走 TypeORM migration
DB_SYNCHRONIZE=false
DB_LOGGING=false
# ---- 文件存储 ----
# 需与 install.sh 的 STORAGE_DIR 一致,且服务用户可写
STORAGE_DIR=/var/lib/opendance/storage
# 单文件上传上限(字节),默认 512 MiB。
# ★ 反向代理层的同名限制必须不小于此值(nginx client_max_body_size /
# IIS requestLimits),否则大模型上传会在代理层被拒(413)。
UPLOAD_MAX_BYTES=536870912
# ---- 可选的 Assimp(FBX/glTF 动作预处理;也用于压缩包模型的转换)----
# 上传 .zip(内含 .pmx 的 MMD 模型包)时必须能调用到它,否则转换会失败
ASSIMP_BIN=assimp
# 模型交付格式:vrm(默认,v0.5.0 起所有上传模型一律转 VRM)| glb
# vrm:在 GLB 之上补 VRMC_vrm 扩展(humanoid 骨骼 / 表情语义)
# glb:仅作为转换中间产物;humanoid 不达标时会回退交付 GLB,
# 该模型 usable=false(可入库可审核,但不进入客户端目录)
MODEL_CONVERT_FORMAT=vrm
# 压缩包里优先选用的 PMX 文件名(大小写不敏感);找不到时按"格式优先级 -> 目录最浅 -> 文件最大"挑
# 值里含空格或 shell 元字符时必须用引号包起来(install.sh 会用
# `set -a; . deploy/.env` 真的执行本文件;不加引号会把 "Miku.pmx" 当命令)
MODEL_CONVERT_PMX="Hatsune Miku.pmx"
# 单次转换超时(毫秒)
# 转换后模型的着色模式:pbr(默认,标准 PBR + 按 PMX 参数修正双面/粗糙度)
# | unlit(给材质写 KHR_materials_unlit:颜色 = 贴图 x baseColorFactor,
# 与场景光照无关,最接近 MMD 的平涂观感;three.js 与 Godot 都支持)
MODEL_SHADING=pbr
MODEL_CONVERT_TIMEOUT_MS=180000
# ---- 默认模型(可选)----
# 显式指定默认模型 id;不设置时按源码 src/config/default-model.ts 里的种子匹配,
# 再回落到契约 data-models.md 4.1 的 VRM 优先规则
# DEFAULT_MODEL_ID=1
# ---- 契约目录 ----
# 指向安装目录下的 contracts/,使 /health 与 /api/catalog/version 反映实时契约版本
CONTRACTS_DIR=/opt/opendance/contracts