关于 animato
Animato 技能通过本地服务和脚本门控,让用户用文本请求为已绑定骨骼的 FBX 或 glTF 角色生成动画。它保存提示词与生成脚本,并在执行前检查脚本;源模型会被导出覆盖。
主要功能
- 01通过文本描述请求角色动画
- 02检查本地服务与密钥状态
- 03执行前静态校验 bpy 脚本
- 04保存提示词和生成脚本
- 05验证动画导出结果
适用场景
- 01为 FBX 角色生成挥手动作
- 02以 dry-run 检查生成脚本
- 03诊断本地 Animato 服务
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ akillness/ jeo-skills --skill animato安装后在 Claude Code 中输入/animato确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
evals/evals.jsonreferences/agent-loop.mdbpy-script-contract.mdexample-bpy-script.pyupstream.mdscripts/animato_agent.pyselftest.pyvalidate_bpy_script.py详细介绍
Animato
何时使用此技能
- 无需打开 Blender,即可根据文本请求为绑定好的
.fbx/.gltf角色制作动画。 - 使用密钥(
ANIMATO_API_KEY/GEMINI_API_KEY/OPENAI_API_KEY)自动运行动画循环,而不是将提示词复制粘贴到聊天窗口。 - 在服务器执行 LLM 编写的
bpy脚本前,对其进行审查或检查。 - 运行、调试或检查本地 Animato 服务及其
/api/*端点的运行状况。
如果任务是创建绑定或重定向动作捕捉数据,请改用 Blender;如果是制作实时游戏特效,请改用 game-vfx;如果是要在浏览器中播放最终片段,请改用 threejs-animation、threejs-loaders。
说明
步骤 1:记录一份动画信息
调用前记录:模型文件及其格式、是否已上传、用一句话描述的动作请求、要使用的提供商/模型/密钥,以及源文件是否可以丢弃。生成的脚本会原位覆盖已上传的模型——如果源文件不可替代,请先复制,再上传。.obj 没有骨架,无法制作动画。
步骤 2:确认服务器和密钥
uv run fastapi run main.py # in the Animato checkout, serves UI + API on :8000
python3 .agent-skills/animato/scripts/animato_agent.py doctor
doctor 会检查服务器是否可访问、密钥是否存在(绝不打印密钥值),以及门禁脚本。使用 ANIMATO_SERVER、ANIMATO_PROVIDER(gemini | openai)、ANIMATO_LLM_ENDPOINT 和 ANIMATO_MODEL 进行配置;参见 references/agent-loop.md。
步骤 3:运行带门禁的循环,而不是直接调用端点
export ANIMATO_API_KEY=... # free-tier key is enough; one inference per animation
python3 .agent-skills/animato/scripts/animato_agent.py animate \
--file "./X Bot.fbx" --message "wave hello with the right arm, 2 seconds"
--mode local(默认)会依次执行上传 → /api/prompt → 一次 LLM 调用 → 静态检查 → /api/run,并将提示词和生成的脚本写入 --out-dir(默认 animato-out/),以便将失败结果作为可审查的产物。使用 --dry-run 可在执行前停止;只有在接受 /api/chat 会在门禁运行前执行脚本的情况下,才使用 --mode server。
步骤 4:重新提交提示词前,先阅读门禁输出
脚本被拒绝,意味着请求或模型选择有误,而不是应该重试循环。
python3 .agent-skills/animato/scripts/validate_bpy_script.py animato-out/X-Bot.generated.py \
--model-path public/upload/X-Bot.fbx
门禁会拒绝过时的 Blender API、缺少关键帧、缺少帧范围、缺少导出、遗漏 export_animations=True / bake_anim=True、格式不匹配,以及 subprocess / os.system / eval 等主机端调用。完整列表见:references/bpy-script-contract.md。
步骤 5:验证动画文件,而不仅仅是 HTTP 状态
/api/run 即使脚本执行失败也会返回 HTTP 200——请根据 ok 分支处理,然后确认 output_url 能够加载并且确实包含片段(gltf.animations / FBX .animations 非空,且每帧都会调用 mixer.update(delta))。如果片段不正确,请重新发起请求;如果片段有问题,请确定性地删除:
python3 .agent-skills/animato/scripts/animato_agent.py remove --filename X-Bot.fbx --name wave
步骤 6:保持循环可靠
将 /api/run 和 /api/chat 视为本地远程代码执行入口:只在可信机器上使用,未经沙箱保护,绝不要公开。自动运行时,每个动画最多进行一次推理;仅凭门禁通过,绝不能声称动画可用——门禁只做静态检查。
示例
离线验证完整循环(无需密钥或 Blender)
python3 .agent-skills/animato/scripts/selftest.py
使用模拟 Animato 服务器和模拟 LLM 运行六种情况:正常流程、门禁拒绝并阻止执行、--dry-run、/api/chat 模式、缺少密钥导致失败,以及 doctor。
使用兼容 OpenAI 的提供商,为已上传的模型制作动画
ANIMATO_PROVIDER=openai ANIMATO_LLM_ENDPOINT=https://api.example.com/v1 ANIMATO_MODEL=my-model \
python3 .agent-skills/animato/scripts/animato_agent.py animate \
--filename X-Bot.fbx --message "idle breathing loop, 3 seconds" --dry-run
检查服务器生成的提示词
python3 .agent-skills/animato/scripts/animato_agent.py prompt \
--filename X-Bot.fbx --message "wave hello" --out prompt.txt
最佳实践
- 上传前复制源模型——动画导出会原位替换源模型。
- 优先使用
--mode local:在执行前检查脚本,而不是执行后再检查。 - 每个动画只进行一次推理;请修正请求或提示词,不要让模型循环运行。
- 骨骼名称、坐标轴和单位均以
/api/prompt输出为准,切勿照搬示例脚本。 - 将保存的提示词和生成的脚本放在一起,方便诊断不良结果。
- 保持服务器处于本地且可信的环境中;密钥应保存在环境变量中,不得出现在日志或产物里。
- 报告成功前,先确认导出的文件能够播放。
参考资料
references/agent-loop.md— 端点、模式、环境变量、故障路由。references/bpy-script-contract.md— 门控规则和已移除 API 表。references/example-bpy-script.py— 符合门控要求的脚本结构。references/upstream.md— 来源、要求、安全边界。- otdnnc/Animato