• v0.2.3 8e8cc0475b

    zijunchiang released this 2026-09-16 03:30:12 +08:00 | 24 commits to main since this release

    OpenDance Studio -- Web 管理服务端 v0.2.3

    修复导入 PMX 模型返回 500,以及 GBK 压缩包丢贴图。 契约与 v0.2.2 相同
    (rest-api / data-models / model-formats 0.4.0、database 0.3.0)。

    根因一:500 Internal server error

    样本 【奥黛塔】_by_原神.zip(643 根骨骼、93,350 面)转换本身成功
    (GLB 23.7MB、1.2s),但分析结果里的骨骼树按骨骼逐条展开,JSON 实测 70,980 字节,
    而 models.stats 是 TEXT(上限 65,535)。MySQL / MariaDB 严格模式直接拒绝写入
    (ER_DATA_TOO_LONG / 1406), 而这一步没有兜底 -> 未捕获 -> 500。

    根因二:18 张贴图只内嵌了 17 张

    tex/髮.png 的 GBK 字节是 F3 8C。文件名解码先试 Shift-JIS, 而 WHATWG 的
    shift_jis 把未定义码位映射成私用区不可见字符(不是 U+FFFD), 于是被判为
    「解码成功」, 永不回退 GBK; 贴图名对不上就丢图。

    本次改动

    1. models.stats -> MEDIUMTEXT(实体 mediumtext + transformer 保留 JSON 语义;
      不用 simple-json 以免实体元数据与库列型不一致), 新增迁移
      AddModelStatsMediumText1789550000000(install.sh 会自动执行);
    2. 新增 shrinkStatsForStorage() 兜底: 即使库没迁移, 也只截断骨骼树
      (父在前, 保留祖先链), 面数 / 骨骼数 / humanoid 覆盖 / 可驱动性 / warnings
      全部保留; 服务层只在 1406 / DATA_TOO_LONG 时裁剪重试一次, 其它 DB 错误照旧抛出;
    3. 压缩包文件名解码把「私用区字符」也算解错信号并回退 GBK —— 实测该模型贴图
      由 17/18 变为 18/18 全部内嵌;
    4. 新增 12 项测试; 测试规模 13 文件 / 205 项。

    已经在跑旧版本的服务器

    不改代码也能立刻解除 500(把列扩到 16MB 即可, 旧代码写入的数据不变):

    ALTER TABLE models MODIFY stats MEDIUMTEXT NULL;
    

    执行的数据库与账号就是 deploy/.env 里的 DB_NAME / DB_USER:

    mysql -h 127.0.0.1 -u "$DB_USER" -p "$DB_NAME" \
      -e "ALTER TABLE models MODIFY stats MEDIUMTEXT NULL;"
    

    改完直接重新导入该压缩包即可(无需重启服务)。
    想同时拿到「18/18 贴图」与后续兜底, 再部署 v0.2.3:

    cd /root
    curl -LO https://gitea.kasugano.cn/zijunchiang/opendance-web/releases/download/v0.2.3/opendance-web-v0.2.3.tar.gz
    curl -LO https://gitea.kasugano.cn/zijunchiang/opendance-web/releases/download/v0.2.3/SHA256SUMS
    sha256sum -c SHA256SUMS
    tar -xzf opendance-web-v0.2.3.tar.gz && cd opendance-web-v0.2.3
    bash deploy/install.sh          # 自动执行 AddModelStatsMediumText 迁移并重启服务
    

    迁移完成后 GET /health 的 database.migrationsPending 应为 0。

    校验

    opendance-web-v0.2.3.tar.gz sha256: d8aefad75baa8080e47c72a95b7990ca15af04d9e58c8492dea5c0ae5c0d3a2d

    Downloads