fix(canvas): Live2D 外观 - 补齐随部署发布的 Cubism Core 运行库

This commit is contained in:
ddCat
2026-09-22 14:17:27 +08:00
parent 7c4495623f
commit 65f639aa71
7 changed files with 35 additions and 9 deletions

3
.gitignore vendored
View File

@@ -73,6 +73,5 @@ camera_language_guide.md
backend/cmd/server/server
# One-off local probe scripts and their compiled output.
backend/tmp_*
# Deployment-owned proprietary Live2D Core; never redistribute in this repository.
/web/public/live2d/live2dcubismcore.min.js
# Keep the runtime in source control; its optional debug map is not deployed.
/web/public/live2d/live2dcubismcore.min.js.map

View File

@@ -17,14 +17,14 @@ description: 助手名称、文案、模型导入和运行库部署
## 部署运行库
前端使用固定版本 `pixi.js@6.5.10` 和 `pixi-live2d-display@0.4.0`,按需加载 Cubism 3/4 渲染适配器。Cubism Core 不包含在仓库中,不从第三方 CDN 加载,也不接受模型 ZIP 中的脚本。
前端使用固定版本 `pixi.js@6.5.10` 和 `pixi-live2d-display@0.4.0`,按需加载 Cubism 3/4 渲染适配器。Cubism Core 已纳入仓库的 `web/public/live2d/live2dcubismcore.min.js`,随前端构建及静态镜像发布,无需部署者另行安装。不从第三方 CDN 加载,也不接受模型 ZIP 中的脚本。Core 保留原始版权与许可声明,不适用本项目的 MIT 许可证;参见同目录 `NOTICE.txt`。
1. 部署者从 Live2D 官方获取具有相应授权、与模型版本兼容的 Cubism SDK for Web。
2. 将 Core 文件 `live2dcubismcore.min.js` 放到前端 `web/public/live2d/` 后重新构建;静态镜像部署也可将文件只读挂载到 `/usr/share/nginx/html/live2d/live2dcubismcore.min.js`。该文件已被 Git 忽略,不提交到本仓库。
1. 使用前确认 Live2D SDK 及模型素材的适用授权;内置运行库不代替部署者对使用场景的授权确认。
2. 拉取包含运行库的提交并重新构建前端,或部署由该提交构建的新镜像。Vite 将 Core 复制到 `dist/live2d/live2dcubismcore.min.js`,Docker 镜像中对应 `/usr/share/nginx/html/live2d/live2dcubismcore.min.js`。旧镜像不会因拉取源码自动更新;已有同路径挂载时应检查是否遮蔽内置文件。
3. 确认同源 `/live2d/live2dcubismcore.min.js` 返回 JavaScript 而非 SPA 页面。非根路径部署跟随前端构建 BASE_URL。
4. 后台导入并预览,成功后选择 Live2D,点击顶部「保存修改」。导入本身不启用;失败不更改当前形象。
没有 Core、模型不兼容、网络超时或 WebGL 上下文丢失时,入口回退默认动态球,仍可点击打开 Agent。后台显示错误并提供重试。未提供授权 Core 和真实模型时,不能仅凭构建成功认定播放验收通过。
部署产物遗漏 Core、模型不兼容、网络超时或 WebGL 上下文丢失时,入口回退默认动态球,仍可点击打开 Agent。后台显示错误并提供重试。未使用具有适用授权的真实模型验证时,不能仅凭构建成功认定播放验收通过。
接入层支持旧版 `drawables.renderOrders` 和新版 Core 的 `Model.getRenderOrders()` 绘制顺序接口,不修改 Core 文件。当前 Cubism 4 渲染适配器不支持新版离屏渲染对象;此类模型会明确报错,而不是忽略对象后显示不完整形象。

View File

@@ -5,6 +5,12 @@ description: 当前项目已实现功能的手工验证清单与未确认边界
# 待测试
## Live2D 运行库随部署交付
- Cubism Core 已纳入版本控制,保留原始版权声明并附第三方许可说明;前端构建和静态镜像直接包含运行文件,不再要求部署者手工安装。
- [x] 5 项 Live2D 专项测试及前端生产构建通过;Core 可初始化并读取版本,构建产物中的 Core 和许可说明与源文件逐字节一致。未执行 Docker 镜像构建或服务器部署。
- [ ] 服务器更新至包含本次修复的新镜像,确认 `/live2d/live2dcubismcore.min.js` 返回 JavaScript 而非 SPA 页面;使用有授权的真实模型完成后台预览、保存及画布形象验收。
## 技能文件包迁移元数据长度
- [x] 启动迁移对旧技能名称、简介的回填元数据按字符数限制长度,省略号计入上限;不改写原始名称、简介和正文,不放宽非迁移入口的校验。

View File

@@ -0,0 +1,12 @@
Live2D Cubism Core
Copyright (C) 2019 Live2D Inc. All rights reserved.
live2dcubismcore.min.js is third-party software, not covered by this
project's MIT license. Its original copyright and license header is retained.
The file identifies itself as "Redistributable Code" under the Live2D
Proprietary Software License Agreement:
https://www.live2d.com/eula/live2d-proprietary-software-license-agreement_en.html
Use and distribution remain subject to the applicable Live2D terms.
Bundling the runtime does not grant rights to model assets or replace any
license required for your use of the Live2D SDK.

File diff suppressed because one or more lines are too long

View File

@@ -9,13 +9,13 @@ function loadCore() {
if (corePromise) return corePromise;
corePromise = new Promise<void>((resolve, reject) => {
const script = document.createElement("script");
// Deployment-owned runtime only. Uploaded models may never provide executable code.
// Bundled same-origin runtime only. Uploaded models may never provide executable code.
script.src = `${import.meta.env.BASE_URL}live2d/live2dcubismcore.min.js`;
const timer = window.setTimeout(() => fail(), 15000);
const fail = () => {
clearTimeout(timer);
script.remove();
reject(new Error("Live2D 运行库未安装或加载失败,请部署 Cubism Core 后重试"));
reject(new Error("Live2D 运行库加载失败,请确认部署产物包含 Cubism Core 且静态资源可访问后重试"));
};
script.onload = () => {
if (!("Live2DCubismCore" in window)) {

View File

@@ -163,7 +163,7 @@ export function CanvasAppearanceEditor({ value, onChange, disabled, onUploading
}
/>
) : null}
<p className="text-xs text-foreground/60">部署者需自行确认 Live2D 授权并安装 Cubism Core 至 /live2d/live2dcubismcore.min.js。未安装时名称、文案和默认动态球仍可使用。未启用的导入包可在资源管理中清理。</p>
<p className="text-xs text-foreground/60">项目已内置 Cubism Core,无需另行安装。使用前仍需确认 Live2D SDK 及模型素材的适用授权。未启用的导入包可在资源管理中清理。</p>
</div>
</div>
);