2026-09-17 18:02:06 +08:00
2026-09-17 17:44:24 +08:00
2026-09-17 18:02:06 +08:00
2026-09-17 17:44:24 +08:00
2026-09-17 17:44:24 +08:00
2026-09-17 17:44:24 +08:00
2026-09-17 17:44:24 +08:00
2026-09-17 17:44:24 +08:00
2026-09-17 17:44:24 +08:00
2026-09-17 17:44:24 +08:00
2026-09-17 17:44:24 +08:00
2026-09-12 13:06:59 +08:00
2026-09-17 17:44:24 +08:00
2026-09-17 17:44:24 +08:00
2026-09-17 18:02:06 +08:00
2026-09-15 23:47:33 +08:00
2026-09-12 13:06:59 +08:00

AI Spine 角色拆件与动画管线

本项目用于把单张 2D 角色参考图转换为可供 Spine 动画使用的语义部件、透明拆件和骨骼资源。

当前正在实现的新管线分为三个核心阶段:

  1. 视觉 LLM 理解角色结构,输出部件语义、层级、遮挡关系、粗框和分割提示点。
  2. 使用 SAM 根据提示点生成精确 mask,并从原图提取可见像素。
  3. 使用图片编辑模型补全被遮挡的部件,再进行几何验收和 Spine 导出。

目前第一阶段已经可以完整运行。SAM 3.1 checkpoint 路径和图片编辑适配器已经接入配置,但 SAM 推理、补全结果合并及新管线的 Spine 导出尚未完成。

仓库仍保留旧版“AI 生成白底拆件图 → OpenCV 拆分 → Genielabs 定位 → Spine 导出”流程,用于对照和回归测试。

文档

环境准备

Node.js

第一阶段要求 Node.js 20 或更高版本,不需要 Python,也没有额外 npm 运行时依赖。

node --version
npm test

中转站配置

在项目目录复制环境变量模板:

Copy-Item .\.env.example .\.env

编辑 .env:

VECTOR_ENGINE_BASE_URL=https://router.genarrative.world/v1
VECTOR_ENGINE_API_KEY=你的令牌

# 可选:覆盖配置文件中的默认模型
SPINE_UNDERSTANDING_MODEL=deepseek-flash
SPINE_COMPLETION_MODEL=qwen-image-3.0

# 当前只记录 checkpoint;SAM 推理尚未接入
SAM_MODEL_DIR=F:/Study/sam3.1

模型 ID 会原样发送给中转站,不进行隐式别名转换。不要把 API Key 写进 JSON 配置或提交到版本库。

Python 与外部项目

运行第一阶段不需要 Python。

只有旧版拆件和 Spine 导出流程需要:

  • Python 3;
  • Pillow、numpy、opencv-python;
  • 相邻目录中的 spine-animation-ai 项目。

安装旧流程依赖:

python -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install -r .\requirements.txt

spine-animation-ai 是外部只读依赖,使用时需要遵守其 PolyForm Noncommercial 许可证。

常用命令

以下命令默认在 AI_spine 目录运行。

查询中转站模型

node .\tools\model-check.mjs --list-models

检查本地配置

不请求模型,也不生成付费内容:

node .\pipeline.mjs --mode annotated-parts `
  --config .\configs\deepseek-qwen.json `
  --reference ..\spine-animation-ai\demo\character_reference.png `
  --dry-run

使用 DeepSeek Flash 理解角色结构

当前已验证可用的配置是 deepseek-flash + chat-completions + stream=false:

node .\pipeline.mjs --mode annotated-parts `
  --config .\configs\deepseek-qwen.json `
  --reference ..\spine-animation-ai\demo\character_reference.png `
  --out-dir .\output\sombrero-understand-deepseek `
  --stop-after understand

重点检查输出目录中的:

  • report.html:人工复核页面;
  • semantic-parts.json:后续 SAM 阶段的正式输入;
  • validation.json:本地结构校验结果;
  • manifest.json:模型、输入、代码版本和产物记录。

使用 GPT-6 Astra 做对照实验

node .\pipeline.mjs --mode annotated-parts `
  --config .\configs\astra-qwen.json `
  --reference ..\spine-animation-ai\demo\character_reference.png `
  --out-dir .\output\sombrero-understand-astra `
  --stop-after understand

当前中转站的 Astra 通道要求 Responses 协议和流式响应。若中转站返回 overloaded,应使用新的输出目录稍后重试。

临时覆盖理解模型

node .\pipeline.mjs --mode annotated-parts `
  --config .\configs\deepseek-qwen.json `
  --understanding-model YOUR_EXACT_MODEL_ID `
  --understanding-protocol chat-completions `
  --stream false `
  --reference .\reference.png `
  --out-dir .\output\model-experiment `
  --stop-after understand

每组模型实验应使用独立的输出目录,避免覆盖对照结果。只有输入、配置、代码和产物哈希全部一致时,才可以通过 --resume 复用结果。

测试图片补全接口

此命令只验证图片编辑适配器并保存原始候选,不代表补全部件已经验收通过:

node .\tools\model-check.mjs --stage completion `
  --image .\local-part.png `
  --prompt-file .\task.txt `
  --out-dir .\output\qwen-edit-test `
  --completion-model qwen-image-3.0

运行旧版完整管线

node .\pipeline.mjs `
  --reference ..\spine-animation-ai\demo\character_reference.png `
  --out-dir .\output\legacy-character `
  --genielabs-dir ..\spine-animation-ai `
  --image-model qwen-image-3.0 `
  --attempts 1 `
  --animations idle,walk,wave

旧流程依赖生成式拆件与传统 CV 定位,对低纹理、低分辨率和生成后外观变化较大的角色不稳定。其输出应通过 assembled.png 和 preview-rigged.html 人工检查后再导入 Spine。

运行测试

npm test

测试使用本地 mock HTTP 服务或注入响应,不调用真实付费模型。

S
Description
No description provided
Readme 40 MiB
Languages
JavaScript 53.1%
Python 46.9%