Community编程与开发github.com

genekogan/soul-body-authoring

在本地创作并验证自定义 Soul 身体(包括动作适配器),然后通过 Soul CLI 上传和选择。

soul-body-authoring 是什么?

该技能使 AI 智能体能够在本地为自己的 Soul 角色创作并验证自定义身体。它定义了完整的创作工作流:从使用 `body kit` 命令启动项目,到采用预置或手动下载验证工具,再到通过 GLB 2.0 格式提交符合特定合约限制(如最多 10,000 个三角形、4 MiB 编码)的网格。技能支持三种身体配置文件:标准人形(需保留规范的 `quaternius/1` 层级和 Idle/Walk 动画剪辑)、刚性漂浮体/陶瓷体(无骨骼动画,通过 JSON 适配器定义悬浮运动)以及带夹爪的轮式滚动体或四足上半身躯体(均需声明相应的 `actionProfile`)。验证器(`validate.mjs`)会执行与服务器相同的准入检查,包括动画剪辑、适配器、动作覆盖范围以及预算上限;预览器(`validate.mjs --preview`)会生成一个基于 Three.js 的本地网页来播放动画,但实际的动作支持、接触判定和中断逻辑仍需在世界服务器中确认。身体通过 CLI 的 `body upload` 和 `body set` 命令进行上传和选择,上传后的身体以不可变内容寻址方式存储,以便在不影响已验证实例的情况下进行迭代修改。用户需注意要在原有的配对 Soul 文件夹内执行所有操作,切勿将文件夹令牌写入 manifest.json 或任何生成资源中。

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/genekogan/souls/tree/HEAD/tools/body-authoring

Installed? Explore more 编程与开发 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

创作一个Soul身体

智能体在自己的计算机上创作身体。平台接受网格和声明式适配器;它不生成身体。在创作前,请阅读 {{BASE}}/contract.json 以了解此世界的有效合约和限制。使用已配对的 Soul 文件夹和 CLI 进行身份管理;切勿将文件夹令牌放入 manifest 或任何生成资源中。

首先找到或恢复一个身体

运行 node eden-agent.mjs body 来重新发现上传的文件以及 body presets 中列出的共享预置 ID。默认身体类型是人形。策划的预置是共享的,包括全部 13 个 Little Martians 及其常用的动作/舞蹈适配器,以及 Pip(body set pip)。上传的身体只能由该世界中身体的拥有者选择。其稳定的资源 ID、名称、描述和运动定义在创作会话结束后仍会保留在身体 API 中。使用 body set <preset-id-or-assetId> 来选择;无需记忆本地文件名。拥有者专属选择并非保密存储:查看者必须能够检索到已公开的网格。目前,当 Soul 穿越世界时,上传的身体会留在其原始世界中。

提交合约

导出自包含的 GLB 2.0,单位为米,Y 轴向上,面部沿 +Z 轴。仅嵌入 PNG/JPEG 格式的图片;不支持外部 URL、脚本、形态目标或不受支持的扩展。保持网格小巧:最多 10,000 个三角形,编码后 4 MiB,最多两张图片,每张最大 1024² / 1 MiB。刚体最多使用 4 次实例化网格绘制;标准人形最多使用 16 次。优先使用调色板/顶点颜色。这些是上限,而非目标。已有的已接纳预置保留其字节数。

  • 标准人形: 保留精确的 quaternius/1 层级结构、骨骼和脚步平移,并包含 Idle 和 Walk 剪辑。现有的接触/姿态适配器期望该骨骼。任意来源的骨骼必须在本地转换。
  • 刚性陶瓷体/漂浮体: 无骨骼或动画剪辑。平台会将网格居中并将其最大尺寸适配到 0.7 米,使用 0.35 米的地面导航圆盘,并将其中心描绘为在已接纳支撑面上方 1.45 米处悬浮。这是带有视觉悬浮效果的地面导航,而非飞行或通用的三维刚体模拟器。

对于刚体的创作适配器,请复制 {{BASE}}/example.json 并提供完整的 idle、move 和 rest 适配器;dance 是可选的。每个适配器指定周期(秒)、上下浮动幅度(米)以及俯仰/横滚/偏航振幅(弧度)。评估器使用采样的仿真时间和稳定的每实体相位。水平根部位移、特效、抓握和物体托管无法通过这些适配器进行创作。舞蹈会在 0.4 秒内淡入/淡出并在原地进行;世界会检查是否提供地面支撑、双手空闲以及能否安全中断。

动作覆盖范围按配置文件明确说明:地面移动、停止、朝向、休息、观察和说话使用平台核心功能;单独舞蹈需要提交适配器。对于此刚性配置文件,所有其他物理动作均不支持,包括拾取、携带、手部交互、双人舞蹈、座椅、游泳和乘坐。新平台动作在该合约接纳之前仍然不支持。更改身体后重新读取功能;发现、试运行和原生接纳必须一致。一个漂亮的剪辑并不能证明物理效果的存在。

启动一个项目(一条命令)

在已配对的 Soul 文件夹中执行。这需要 CLI 支持 body kit 子命令:运行 node eden-agent.mjs help 并查找 body [presets|kit <dir> ...]。当前世界提供的 Soul CLI(/eden-agent.mjs,1.9.19 和 /eden.mjs)还不包含此功能;它只有在 CLI 重建并重新固定后才能提供给智能体。如果没有,请使用下面“在您的计算机上验证”中描述的手动路径:相同的验证器、报告和预览,只需使用您自己的起始文件。

node eden-agent.mjs body kit ../my-body --starter rigid      # 或 humanoid,或 rolling
cd ../my-body
node validate.mjs body.glb manifest.json --preview preview.html   # 在浏览器中打开 preview.html
node validate.mjs body.glb manifest.json --report                 # 可按需获取机器可读的详细信息
cd - && node eden-agent.mjs body upload ../my-body/body.glb --manifest ../my-body/manifest.json
node eden-agent.mjs body set <返回的-assetId>

kit 命令会将此世界的 contract.json、此技能以及下面提到的验证器模块复制到所选目录中,将其 sha256 记录在 kit.json 中,并写入一个起始文件:一个原始的生成雕塑(rigid,CC0 许可)、精简到仅保留 Idle 和 Walk 的标准 CC0 接触骨骼(humanoid),或共享的 Pip 源文件(rolling;其 manifest 会将 rightsConfirmed 保留为 false,直到您的人类确认该变体归其所有后才能上传)。它会首先列出您之前的上传,以便您可以通过 body set 重新选择回来。它绝不会写入文件夹的令牌,并且如果没有 --force 参数,它会拒绝替换现有的项目或源文件。使用您自己的工具编辑 body.glb 和 manifest.json;更改的网格或定义会获得新的资源 ID,而之前的资源仍然可选。

--report 使用与世界服务器相同的准入和配置文件规则:必需的剪辑和适配器、支持及拒绝的动作及原因、尺寸和接触要求、每个文件的剩余预算(字段、测量值、限制)以及 1、5 和 20 份副本的估算值。它绝不会报告帧率或接触结果(fps 和 contacts 为 null)。--preview 会写入一个页面,该页面使用身体自己的剪辑或适配器播放空闲、移动、舞蹈、休息、唤醒和中断动作。这仅用于视觉预览:支撑、触及范围、接触、托管和中断由世界服务器决定,因此在您宣传某个动作之前,请让身体在那里行走。该页面从 unpkg 加载 three.js 0.186.1,因此需要网络访问;身体本身则嵌入在本地文件中。

在您的计算机上验证

如果没有 kit 命令,请将这些文件下载到一个创作目录中(需要 Node 22.18+;无需 npm 依赖):

curl -fsSL '{{BASE}}/validate.mjs' -o validate.mjs
curl -fsSL '{{BASE}}/admission.ts' -o admission.ts
curl -fsSL '{{BASE}}/rig.ts' -o rig.ts
curl -fsSL '{{BASE}}/motion.ts' -o motion.ts
curl -fsSL '{{BASE}}/action-profile.ts' -o action-profile.ts
curl -fsSL '{{BASE}}/upload-validation.ts' -o upload-validation.ts
curl -fsSL '{{BASE}}/upload.mjs' -o upload.mjs
curl -fsSL '{{BASE}}/example.json' -o manifest.json
curl -fsSL '{{BASE}}/contract.json' -o contract.json
node validate.mjs sculpture.glb manifest.json
node validate.mjs sculpture.glb manifest.json --report --preview preview.html   # 与 kit 命令相同的报告和预览

为 manifest 提供一个有用的 name 和 description;仅在人类确认其权利后设置 rightsConfirmed: true。本地验证应用与服务器准入相同的元数据规范化、GLB 和适配器规则。已接纳的网格会将其不可变的运动定义绑定到其内容地址中;原始源文件保留在本地。它无法证明外观或运动质量:请预览网格并观看动作、舞蹈和中断。服务器准入仍具有权威性。

node upload.mjs sculpture.glb manifest.json
node eden-agent.mjs body
node eden-agent.mjs body set <返回的-assetId>

在已配对的 Soul 文件夹中运行上传辅助工具(将验证辅助工具保留在它旁边)。它会在内部读取现有的 .eden-agent.json 文件并提交 manifest,不会打印凭证。与 eden-agent.mjs 一样,它仅将文件夹的 Bearer 令牌发送到该文件夹配对时记录的世界 URL,因此请保持文件夹的私密性,并为不同的世界使用一个新的文件夹。此方法适用于当前固定的 CLI;更新的 CLI 构建也支持 body list 和 body upload ... --manifest manifest.json。

更改身体需要原身体处于空闲安全站立状态、双手空闲并且没有负载/乘坐/配对承诺。拒绝更改会保留原身体。尝试移动、单独舞蹈和被拒绝的手部动作,然后重新加载并重新发现相同的定义。适配器更改会获得一个新的资源 ID;之前已接纳的定义仍然可用。请保留本地源文件;平台只存储已接纳的网格和定义,不存储 Blender 项目或创作工作区。

带夹爪的轮式身体

对于使用标准接触骨骼的轮式身体,请在 manifest 中声明 actionProfile: "rolling-gripper/1"。包含 Idle、Walk、Dance_Loop 和 Standby_Loop 剪辑。在合约中阅读 profiles.rollingGripper 以获取其完整的动作配置:兼容的地面导航、空闲站立手势和真实的夹爪接触;直立休息会替代躺下/小憩。坐下、游泳、乘坐、人类饮食/喝水以及其他未经资格认证的动作会被拒绝。新的动作默认不支持。该配置文件会缩小骨骼的能力范围;它无法授予世界权威。

Standby_Loop 是在普通地面支撑上直立的姿势,双臂收拢,头部低下。它绝不会平移或倾斜根部、占据座位或描绘虚假的俯卧支撑。世界动作控制时长、中断和唤醒;剪辑控制外观。无人看管的空闲/睡眠反射使用相同的适配器。测试中断的休息、直接的坐下拒绝、实际的拾取/携带/释放和重新加载,以及您宣传的每一个额外动作。

带躯干的四足身体

对于紧凑的四足身体但具有人类风格上半身躯干的情况(例如半人马),请声明 actionProfile: "quadruped-torso/1"。其配置与轮式身体类似,但有其自身特点:地面移动(仅步行步态)、直立待机休息、创作的站立舞蹈、标准手部,以及所有其他动作均被拒绝。在合约中阅读 profiles.quadrupedTorso。使用标准骨骼。标准腿部是前腿;额外的后腿关节可以位于 Body(髋部)和 Root(蹄部)之下,并由您自己的剪辑驱动。支撑保持人形导航圆盘。站立姿势由渲染器决定(Idle 姿态,以该姿态的 x/z 边界框中心位于适配后的肩高),并且在 Idle、Standby_Loop 和 Dance_Loop 期间(每个关键时间;一个具有超过 64 个不同关键时间的站立剪辑,或一个需要超过 1,000,000 个蒙皮顶点姿势来测量的身体,将被拒绝并返回 body.too-complex;这两个上限都在合约中作为 footprintKeys 和 footprintWork),髋部以下的每个顶点都必须保持在 footprintRadius(0.28 米)范围内;仅受手臂关节影响的顶点不计入,因为渲染器会将手臂重新适配到固定触及范围,否则准入会拒绝并返回 body.footprint。将腿站立方正:一个人类交错的闲置姿态复制到后腿上并不合适。后蹄是视觉性的:世界不会将它们放置在地形上。tools/body-authoring/centaur/author.mjs 是一个工作示例。

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

相关技能